본문 바로가기

백준

[백준] 카드2 (2164번)

728x90

코드 힌트

  1. 입출력 최적화:
    • 대용량의 데이터를 빠르게 처리하기 위해 BufferedReader와 BufferedWriter를 사용하여 입력과 출력을 처리합니다. 이 방법은 효율적인 입출력 처리를 가능하게 합니다.
  2. 큐 초기화:
    • 1부터 n까지의 숫자를 큐에 넣습니다. 큐는 순서대로 데이터를 처리하는 구조로, 여기서는 카드 게임의 순서를 모방합니다.
  3. 카드 제거와 이동:
    • 큐의 크기가 1이 될 때까지 가장 앞의 카드를 제거한 후, 그 다음 카드를 다시 큐의 뒤에 추가하는 작업을 반복합니다. 이 과정은 마치 카드를 한 장씩 버리고 다음 카드를 다시 큐에 넣는 것과 같습니다.
  4. 마지막 카드 출력:
    • 마지막으로 남은 카드가 최종 결과입니다. 이 값을 출력합니다.

 


정답은 더보기 클릭

더보기
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws NumberFormatException, IOException {
        // BufferedReader와 BufferedWriter를 사용해 입출력 처리
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // n을 입력받아 정수로 변환
        int n = Integer.parseInt(br.readLine());
        
        // 큐를 사용하여 카드 순서를 관리
        Queue<Integer> q = new LinkedList<>();
        
        // 1부터 n까지의 숫자를 큐에 추가
        for (int i = 1; i <= n; i++) {
            q.add(i);
        }
        
        // 큐에 카드가 한 장 남을 때까지 반복
        while(q.size() > 1) {
            q.poll();  // 가장 앞의 카드를 버림
            q.add(q.poll());  // 그 다음 카드를 큐의 뒤로 이동
        }
        
        // 마지막 남은 카드를 출력
        bw.write(q.poll() + "\n");
        
        // BufferedWriter의 남은 데이터를 출력
        bw.flush();
        bw.close();
    }
}
728x90

'백준' 카테고리의 다른 글

[백준] 분해합 (2231번)  (0) 2024.08.27
[백준] 최소공배수 (1934번)  (0) 2024.08.26
[백준] 단어 정렬 (1181번)  (0) 2024.08.17
[백준] 나이순 정렬 (10814번)  (0) 2024.08.17
[백준] 터렛 (1002번)  (0) 2024.08.16