Programming/JAVA

[백준] 11866: 요세푸스 문제 0

gayeon_ 2024. 6. 5. 19:43

 

사람 수인 N과 제거될 번호인 K를 입력받는다.

그리고 모두 제거될 때까지 1에서 N번의 사람 중 K번째인 사람이 제거된다.

 

 

import java.util.*;
import java.lang.*;
import java.io.*;

class Main {
    public static void main(String[] args) {
        // 큐 생성
        Queue<Integer> queue = new LinkedList<>();
        // 입력을 위한 scanner 선언
        Scanner scanner = new Scanner(System.in);
        // 사람 수 입력
        int N = scanner.nextInt();

        // 큐에 1부터 N까지 추가
        for(int i = 1; i <= N; i++){
            queue.offer(i);
        }

        int K = scanner.nextInt();

        System.out.print("<");
        
        while(!queue.isEmpty()){
            // K번째 요소를 맨 앞에 오도록 정렬
            for(int i = 0; i < K-1; i++){
                int element = queue.poll();
                queue.offer(element);
            }
            // K번째 요소 출력 후 삭제
            System.out.print(queue.poll());
            
            if(queue.size() >= 1) {
                System.out.print(", ");
            }
        }
        System.out.print(">");
    }
}

 

1부터 N까지 숫자를 저장하기 위해 Integer Queue를 생성했다.

N과 K는 Scanner로 입력받았다.

 

N값 입력 후 1부터 N까지의 수를 큐에 저장했다.

 

큐의 요소를 삭제할 때는 맨 첫 번째 요소만 제거(poll())가능하므로

K번째 요소가 큐의 맨 앞자리가 오도록 정렬을 했다.

 

정렬은 K의 앞에 있는 요소들을 poll()한 뒤 offer()해서 큐에 맨 뒤로 보내는 방식으로 했다.

 

K번째 요소가 맨 앞에 왔다면 poll()로 삭제 및 출력을 해준다.

이때 큐의 사이즈가 1보다 크다면(요소가 존재한다면) ', '를 출력하도록 if문을 작성했다.