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문을 작성했다.