자료구조&알고리즘/백준

11866번: 요세푸스 문제 0 [JAVA]

yong_ღ'ᴗ'ღ 2023. 7. 16. 22:26

 

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

 

11866번: 요세푸스 문제 0

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)

www.acmicpc.net

 

접근 방식)  

1) 원형으로 사람들이 돌면서 빠지는 거니까, Queue를 만들고 1 ~ N까지 추가한다.

2) Queue가 빌 때까지 반복하면서 count를 증가시킨다.

    count가 K와 같으면, queue에서 빼고, count = 1로 초기화

    count가 K가 아니면, queue의 앞에서 빼서, 다시 뒤에 넣어준다. → queue.add(queue.poll())

 

package codingTestStudy.week1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class B_11866 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        // 큐에 1 ~ N까지 추가
        Queue<Integer> queue = new LinkedList<>();
        for (int i = 1; i <= N; i++)
            queue.add(i);

        int count = 1;
        StringBuilder sb = new StringBuilder();
        sb.append("<");
        while (!queue.isEmpty()) {
            if (count % K == 0) {
                sb.append(queue.poll()).append(", ");
            else 
                queue.add(queue.poll());
            
            count++;
        }
        sb.replace(sb.length() - 2, sb.length(), ">");
        System.out.println(sb);
    }
}