본문 바로가기
Baekjoon

[백준] 11866번 - 요세푸스 문제 0 - Java

by jinjin98 2022. 12. 11.

 

1에서 N 까지 값을 큐에 추가합니다.

큐에서 값을 빼오는 횟수인 카운트를 K 로 초기화합니다. 카운트의 값만큼 큐에서 값을 빼오며 카운트를 감소시킵니다. 

카운트가 0이 아니라면 빼온 값을 다시 큐에 추가하고 ,

카운트가 0이라면 K 번쨰 뺀 값을 큐에 추가하지 않고 StringBuffer 에 담습니다.

그리고 카운트를 K 로 다시 초기화합니다. 위 과정을 큐에 값이 없을 때까지 반복합니다.

 

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 p11866 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuffer sb = new StringBuffer("<");
        Queue<Integer> q = new LinkedList<>();

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

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

        int count = K;
        int num;
        while (!q.isEmpty()) {

            num = q.poll();
            count--;

            //K번째 사람을 제거했다면
            //큐에 다시 집어넣지 않고 버퍼에 추가
            //다시 count 를 K 로 초기화
            if(count == 0) {
                sb.append(num + ", ");
                count = K;
            } else {
                q.offer(num);
            }
        }
        //마지막에 붙인 쉼표와 공백 제거
        sb.delete(sb.length()-2, sb.length());
        sb.append(">");
        System.out.println(sb);
    }
}

 

댓글