Shiny Sky Blue Star

백준 문제 풀이/백준 (JAVA)

JAVA 백준 2164 카드 2 (큐)

gamja00 2025. 4. 29. 15:26

 

https://www.acmicpc.net/problem/2164

 


문제

  1. 첫째 줄에 정수 N ( 1 <= N <= 500000 ) 이 입력된다.
  2. 맨 위에 1번 카드, 맨 아래에 N번 카드로 1번부터 N번 카드가 순서대로 놓여진다.
  3. 제일 위에 있는 카드를 버린 후 제일 위에 있는 카드를 맨 밑으로 옮기는 동작을 카드가 1장 남을 때까지 반복한다.
  4. 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까지의 모든 수를 넣고 동작을 반복하여 마지막에 남는 수를 출력하면 답이 나온다.