[백준(JAVA)] 2164번: 카드2

세하·2025년 4월 23일

[백준] 문제풀이

목록 보기
44/94
post-thumbnail

문제

✔ 난이도 - Silver 4

설명

https://velog.io/@seha01130/백준JAVA-1158번-요세푸스-문제
위의 문제를 풀 수 있다면 바로 풀 수 있다

나는 처음에 아래처럼 코드를 짰음.
카드가 한 장 남을때까지 반복하는데, 무엇을 반복하냐면 버리고 뒤로보내고를 반복함. 그 반복을 위해 for문을 한 번 더 사용했다

while (list.size() > 1){
	for (int i = 0; i < 2; i++){
		if (i == 0){
			list.remove();
		} else {
			list.add(list.remove());
		}
	}
}

그러나 아래처럼 하나의 while문으로 끝낼 수 있었다.
한 장 버리면 그 다음 카드가 맨 앞 카드가 되기때문에 그걸 맨 뒤로 보낸다. 이걸 카드가 한 장 남을때까지 반복하면 된다.

while (list.size() > 1){
	list.removeFirst();
	list.addLast(list.removeFirst());
}

풀이

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

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        LinkedList<Integer> list = new LinkedList<>();
        for (int i = 1; i <= N; i++){
            list.add(i);
        }

        while (list.size() > 1){
            for (int i = 0; i < 2; i++){
                if (i == 0){
                    list.remove();
                } else {
                    list.add(list.remove());
                }
            }
        }

        sb.append(list.get(0));
        System.out.println(sb);
    }
}

TIL💡

📌 https://velog.io/@seha01130/LinkedList-메소드-정리

0개의 댓글