코딩테스트/자바 문제풀이

[자료구조] 백준 2164 카드(2)

승요나라 2024. 7. 14. 20:08

2164번: 카드(2)

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

 

# 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // N
        long n = Long.parseLong(br.readLine());

        // N장의 카드를 담을 LinkedList
        LinkedList<Long> n_list = new LinkedList<>();

        // 1~N 값을 리스트에 차례로 추가
        for (long i = 0; i < n; i++) {
            n_list.add(i + 1);
        }

        // 카드가 한 장 남을 때까지 반복
        while (n_list.size() != 1) {
            // 가장 위 카드 버리기
            n_list.removeFirst();
            // 가장 위 카드를 빼서 마지막으로 옮기기
            n_list.addLast(n_list.removeFirst());
        }

        // 마지막 카드 출력
        bw.write(String.valueOf(n_list.get(0)));

        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤 닫기
        bw.flush();
        bw.close();
    }
}
  • 바로 직전 1158 요세푸스 문제보다 난이도가 낮아 쉽게 풀 수 있었던 문제였다.
  • 역시 삽입과 삭제가 빠른 LinkedList를 이용해 구현했다.