백준 - 요세푸스 문제 (실버 4)

2024. 3. 6. 13:29코딩테스트 정리(자바)

728x90
import java.io.*;
import java.util.*;

class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(
                new InputStreamReader(System.in));
        BufferedWriter bw=new BufferedWriter(
                new OutputStreamWriter(System.out));

        String[] input=br.readLine().split(" ");
        int N=Integer.parseInt(input[0]);
        int K=Integer.parseInt(input[1]);
        List <Integer> list=new ArrayList<>();
        

        for(int i=1;i<=N;i++){
            list.add(i);
        }

        StringBuilder sb = new StringBuilder();
        sb.append("<");
        int index = 0; // 시작 위치

        while(list.size() > 1){
            index = (index + K - 1) % list.size(); // K번째 사람 찾기
            sb.append(list.remove(index)).append(", "); // K번째 사람 제거
        }

        sb.append(list.get(0)).append(">"); // 마지막 남은 사람 추가
        bw.write(sb.toString());

        bw.flush();
        bw.close();
    }
}

 

1. remove 함수도 원소를 반환함.

2. 리스트의 원소를 하나씩 제거하면 리스트의 크기도 그만큼 줄어듦

-> 따라서 N으로 나누면 안 되고 list.size()로 나눠줘야 함.

여기서 헤맴.

728x90