종식당

[백준 2161 with JAVA] 카드1 본문

백준

[백준 2161 with JAVA] 카드1

종식당 2025. 2. 28. 14:41
728x90
반응형

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

📝 문제 설명

정수 N을 입력받으면 1부터 N까지의 카드가 순서대로 1번이 제일 위 N번이 제일 아래인 상태로 놓여있다.
카드가 한 장 남을 때까지 반복하게 되는데 제일 위에 있는 카드를 버리고 그다음 제일 위에 있는 카드를 제일 아래에 있는 카드 밑으로 옮긴다. 버린 카드들을 순서대로 출력하고 마지막에 남게 되는 카드를 출력하면 된다.

✨ 제출 코드

import java.io.*;
import java.util.*;

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> q = new LinkedList<>();
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < N; i++){
            q.offer(i+1);
        }

        while(!q.isEmpty()){
            int head = q.poll();
            sb.append(head).append(" ");

            if(q.isEmpty()){
                break;
            }
            int bottom = q.poll();
            q.offer(bottom);
        }
        System.out.println(sb);
    }
}

✌️ 코드 설명

먼저 1부터 N까지 큐에 담아준다. 그리고 q.poll()을 통해 가장 위의 카드를 빼고 나중에 출력해줘야 하기 때문에 StringBuilder에 담아준다. 그다음 카드를 뽑아 제일 아래의 카드 밑에 넣어줘야 하기 때문에 q.poll()을 통해 뽑은 다음 q.offer를 통해 다시 큐의 마지막에 넣어주면 된다. 

728x90
반응형