Algorithm

자료구조 / 백준 1158 요세푸스 문제

Dear-J 2025. 4. 5. 18:35

 

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;

public class S1158 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        Queue<Integer> queue = new ArrayDeque<>();
        for (int i = 1; i <= N; i++) {
            queue.add(i);
        }

        sb.append("<");

        int cnt = 0;

        while (!queue.isEmpty()) {
            cnt++;
            if (cnt == K) {
                sb.append(queue.poll());
                cnt = 0;
                if (!queue.isEmpty()) {
                    sb.append(", ");
                }
            } else {
                queue.add(queue.poll());
            }
        }
        sb.append(">");
        System.out.println(sb);
    }
}

 

Queue나 ArrayDeque 사용해서 풀이 가능

 

cnt 변수를 사용해서 K와 다를 때는 poll과 동시에 다시 queue의 뒤로 add해서 원처럼 작동하게 하고

K와 같을 때는 poll을 진행