최대 1 분 소요

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;

public class 백준_손수경_정답_2164 {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(br.readLine());
        LinkedList<Integer> cards = new LinkedList<>();

        for (int i = 1; i <= n; i++) {
            cards.add(i);
        }

        while (cards.size() != 1) {
            cards.removeFirst();
            cards.addLast(cards.get(0));
            cards.removeFirst();
        }

        bw.write(cards.get(0) + "\n");
        bw.close();
    }
}

풀이 방법

이 문제는 리스트에 대하여 수정해야될 부분이 많기 때문에 ArrayList보다는 LinkedList가 편리할 것으로 생각되어 LinkedList를 사용하였다. 문제 규칙대로 n까지의 숫자를 리스트에 넣은 다음 첫 번째 요소 버리고, 그 다음 요소를 제일 뒤로 보내고, 이것을 cards에 요소 1개가 남아있을 때까지 수행한다.

댓글남기기