https://www.acmicpc.net/problem/2164
문제
- 첫째 줄에 정수 N ( 1 <= N <= 500000 ) 이 입력된다.
- 맨 위에 1번 카드, 맨 아래에 N번 카드로 1번부터 N번 카드가 순서대로 놓여진다.
- 제일 위에 있는 카드를 버린 후 제일 위에 있는 카드를 맨 밑으로 옮기는 동작을 카드가 1장 남을 때까지 반복한다.
- N이 주어졌을 때, 제일 마지막에 남게 되는 카드를 구하여 출력하라.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= N; i++) {
queue.offer(i);
}
while (queue.size() != 1) {
queue.poll();
queue.offer(queue.poll());
}
System.out.println(queue.poll());
}
}
단순하게 시키는 거만 하면 되는 문제인 것 같다.
큐에 모든 1부터 N까지의 모든 수를 넣고 동작을 반복하여 마지막에 남는 수를 출력하면 답이 나온다.
'백준 문제 풀이 > 백준 (JAVA)' 카테고리의 다른 글
JAVA 백준 1919 애너그램 만들기 (문자열) (0) | 2025.04.30 |
---|---|
JAVA 백준 10845 큐 (큐) (0) | 2025.04.29 |
JAVA 백준 1260 DFS와 BFS (그래프) (1) | 2025.04.28 |
JAVA 백준 2292 벌집 (수학) (1) | 2025.04.27 |
JAVA 백준 10448 유레카 이론 (브루트 포스) (0) | 2025.04.27 |