백준 카드1

KIMYEONGJUN·2025년 3월 9일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 정수 N(1 ≤ N ≤ 1,000)이 주어진다.

첫째 줄에 버리는 카드들을 순서대로 출력한다.
제일 마지막에는 남게 되는 카드의 번호를 출력한다.

내가 이 문제를 보고 생각해본 부분

입력 처리: BufferedReader를 사용하여 입력을 빠르게 입력한다.
큐 초기화: LinkedList를 사용하여 1부터 N까지의 카드 번호를 큐에 추가한다.
카드 처리: 큐의 크기가 1보다 클 때까지 반복하여 제일 위 카드를 버리고, 다음 제일 위 카드를 제일 아래로 이동한다.
출력: 버린 카드와 마지막 남은 카드를 StringBuilder에 추가하여 최종적으로 출력한다.

코드로 구현

package baekjoon.baekjoon_27;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

// 백준 2161번 문제
public class Main955 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        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) { // 카드 처리
            sb.append(queue.poll()).append(" "); // 제일 위 카드 버리기
            queue.offer(queue.poll()); // 제일 위 카드를 제일 아래로 이동
        }

        sb.append(queue.poll()); // 마지막 남은 카드
        System.out.println(sb.toString()); // 결과 출력
        br.close();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글