알고리즘

[백준] 11866번 요세푸스 문제 0 _ JAVA ( 주석 설명 ) 본문

백준 - JAVA/큐, 덱

[백준] 11866번 요세푸스 문제 0 _ JAVA ( 주석 설명 )

wch_s 2023. 3. 20. 20:46

풀이

1) N만큼의 숫자를 queue 에 넣는다.

2) queue 에서

K번째 수는 queue.poll() 을 하고 해당 수를 StringBuilder 에 저장을 해준다.

일반적인 수는 queue.poll() 을 하고 그 수를 다시 queue.add() 를 해준다.

 

코드

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

public class Main {
    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();
        sb.append("<");

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

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

        int count = 1;
        while(!queue.isEmpty()){
            int num = queue.poll();

            if(count%K!=0){ //요세푸스 순열의 K번째 수가 아니면 queue에 넣는다.
                queue.add(num);
            }
            else{
                sb.append(num).append(", ");
            }

            count++; //-번째인지 count 한다.
        }
        sb.setLength(sb.length()-2); //StringBuilder ", " 삭제
        sb.append(">");
        System.out.println(sb);
    }
}