Algorithm/Baekjoon
[백준] 23056 참가자 명단 - Java
[백준] 23056 참가자 명단 - Java
2021.10.31정렬 문제인데.. 조건이 까다롭다. 학급번호가 홀수인 학급을 청팀으로, 짝수인 학급을 백팀으로 나눈 다음 청팀을 먼저 출력하고 백팀을 나중에 출력한다. 학급별로 참가자를 출력하는데, 이름의 길이는 오름차순으로 출력하되 길이가 같으면 사전순으로 출력한다. 신청 가능한 수를 입력받는데 이 수보다 더 많이 참여할 수는 없다. 위 조건을 고려하면서 코드를 작성해야 한다. 코드를 통해 알아보자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int M = sc.nextInt(); // N은 학급 수 M 은 신청 ..
[백준] 10845 큐 - Java
[백준] 10845 큐 - Java
2021.10.30큐를 활용해도 되고, 큐를 구체화한 덱을 활용해도 된다. 큐에 대해 알고 있다면 그냥 하라는대로 구현만 하면 되는 문제이다. import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int cycle = sc.nextInt(); sc.nextLine(); Deque q = new LinkedList(); for(int i=0; i
[백준] 2702 초6수학 - Java
[백준] 2702 초6수학 - Java
2021.10.29유클리드 호제법으로 최대공약수를 구하고 풀어주는 문제이다. import java.util.*; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); int cycle = sc.nextInt(); for (int i = 0; i b while (b..
[백준] 1159 농구 경기 - Java
[백준] 1159 농구 경기 - Java
2021.10.29간단한 문제지만 char을 다루는 테크닉을 점검할 수 있는 문제이다. 알파벳 소문자의 개수는 26개인데, 넉넉하게 배열의 크기를 30으로 잡고 처리했다. 'a' 를 더하거나 빼줌으로 int 배열의 인덱스를 문제 풀이에 활용할 수 있다. 코드를 통해 확인하자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int cycle = sc.nextInt(); String[] arr = new String[cycle]; for (int i = 0; i < cycle; i++) { a..
[백준] 1100 하얀 칸 - Java
[백준] 1100 하얀 칸 - Java
2021.10.29간단한 문제다. String타입의 이차원 배열을 선언하고 배열을 완성시킨 다음 하얀 칸 위에 있는 말의 개수를 세 주면 된다. 체스판을 이차원 좌표평면에 표현했을 때 x와 y 값의 합이 짝수이면 하얀 칸임을 이용하자. 사실 이 부분은 센스가 필요하다. 생각해내지 못했으면 이제 알았으니까 다음에는 스스로 생각해 낼 수 있으면 된다. 문제를 많이 풀어서 센스를 기르고 문제 해결력을 기르자. 코드를 통해 확인하자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[][] arr = new String[8][]; for(int i=0; i
[백준] 1874 스택 수열 - Java
[백준] 1874 스택 수열 - Java
2021.10.29다 풀고 나서 사소한 실수 때문에 1시간동안 삽질을 한 문제이다. 문제 이해가 정말정말 중요하다. 예시와 내가 푼 방법으로 간단하게 설명해 보면, 8 4 3 6 8 7 5 2 1 예시로 왼쪽과 같이 입력받았다고 하자. 처음 입력값은 4 이다. stack에 4번 push를 진행한다. => stack = {1,2,3,4} 출력 결과 = {} 입력값이 4 이므로 pop을 수행한다. => stack = {1,2,3} 출력 결과 = {4} 다음 입력값은 3 이다. 이미 스택에 1.2.3.이 있기 때문에 pop으로 꺼내준다. => stack = {1,2} 출력 결과 = {4,3} 다음 입력값은 6 이다. 스택에 6은 없다. push를 진행하자. 이 때. push하는 수는 이전의 입력값 중 가장 큰 수 +1 이다. ..
[백준] 1935 후위 표기식2 - Java
[백준] 1935 후위 표기식2 - Java
2021.10.29후위 표기식 문제이다. 지난 시간에 푼 문제는 평범한 식을 후위 표기식으로 변환하는 문제였다면 이번 문제는 반대로 후위 표기식을 평범한 식으로 변환하는 문제이다. 사실 변환할 필요는 없고, 문자에 대한 값이 주어졌을 때 후위 표기식으로 표현된 식의 연산 결과를 구할 수 있으면 된다. 풀이 방법은 간단하다. 문자가 입력되면 문자에 해당하는 값을 스택에 넣어주고 연산자가 입력되면 스택에 있는 값 두 개를 빼서 연산자로 연산을 진행한다. 문자의 값을 지정해 주는 아이디어가 생각이 안 날 수 있는데 double 타입의 배열과 char을 이용해서 처리해 줬다. 코드를 통해 알아보자. import java.util.*; public class Main2 { public static void main(String[]..
[백준] 1918 후위 표기식 - Java
[백준] 1918 후위 표기식 - Java
2021.10.29문제 이해는 어렵지 않은데 어떻게 풀어야 할 지 정말 고민을 많이 한 문제이다. 스택의 관점에서 생각해보자. 연산자 : + - * / 문자 : A~Z 스택과 문자열을 만들고, 스택에 어떤 연산자가 들어가있는지에 따라 연산자에 대한 처리를 해 줘야 한다. 연산자의 우선순위도 정해진다. + - 는 * / 보다 우선순위가 떨어진다. 1. 문자가 입력되면 바로 출력한다. 2. 연산자가 입력되면 스택의 가장 위쪽에 들어가 있는 연산자의 종류에 따라서 다른 연산을 한다. 2-1. 입력된 연산자의 우선순위가 스택의 꼭대기에 들어있는 연산자의 우선순위보다 높을 때, 스택의 요소를 하나하나 지우고 지운 값을 출력한다. 스택의 꼭대기에 들어있는 연산자의 우선순위가 입력된 연산자의 우선순위보다 작을 때 까지 반복한다. 3...
[백준] 10799 쇠막대기 - Java
[백준] 10799 쇠막대기 - Java
2021.10.29문제 이해가 정말정말 중요하다. 종이에 몇 번 써 보고 직접 세 보는 등 문제를 먼저 이해하자. 1. ( ) 가 연속으로 나오면 레이저를 쏜다. 2. ) 전에 ( 가 나오지 않았으면 막대기를 완성한다. 이제 어떻게 셀 지 생각해 봐야 한다. 레이저를 한 번 쏠때 막대가 몇 개 생기는지에 대해 생각해 봤다. ( 로 막대 계층이 높아지면 그 층 수 만큼 막대가 생긴다. 이 문제도 스택으로 분류된 문제니 스택으로 코드를 짜 보자. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); Stack st = n..
[백준] 9012 괄호 - Java
[백준] 9012 괄호 - Java
2021.10.29문제를 읽고 생각해보자. "()" 속에 VPS가 올 수 있다. VPS끼리 concatenation은 가능하다. 처음에는 감이 안잡혔는데 알고리즘 분류가 스택이니까 스택의 관점에서 고민해봤다. 1. '(' 와 ')' 의 개수는 같아야 한다. ( "()" 는 한 세트로 움직인다 ) 2. '(' 가 먼저 들어와야지 ')' 를 입력받을 수 있다. 위를 바탕으로 코드를 작성했다. import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); StringBuilder sb = new StringBuilder(); int cycle = sc.nextInt(); sc.ne..