백준 문제풀이
[백준] 2164번 카드2 [JAVA]
늦깍이
2022. 9. 14. 13:08
https://www.acmicpc.net/problem/2164
2164번: 카드2
N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가
www.acmicpc.net
문제
문제 풀이
- 전형적인 큐 문제이다.
- 첫 번째 수는 버리고, 두 번째 수는 맨 뒤로 보내 순서를 바꾸는 것을 반복하면 된다. 앞과 뒤가 있으므로 큐를 활용하는 것이 가장 좋다.
- 푼 방법
1. 큐를 만든다(qu)
2. 1부터 N까지 순서대로 qu에 넣어준다. (front = 1 , back = N)
3. while문을 통해 qu의 size가 1이 될 때까지(size가 1이 되면 break해준다.), qu.poll(); qu.add(qu.poll());을 반복해준다.
4. 마지막 남은 큐의 멤버를 qu.poll()을 통해 print해준다.
JAVA code
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Queue;
import java.util.LinkedList;
public class baekjoon2164 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Queue<Integer> qu = new LinkedList<>();
for (int i = 1; i <= N; i++)
qu.add(i);
while (true) {
if (qu.size() == 1)
break;
else {
qu.poll();
qu.add(qu.poll());
}
}
System.out.println(qu.poll());
}
}