말하는 컴공감자의 텃밭

백준 11866번 요세푸스 문제 0 <S5> - 구현 본문

알고리즘/Backjoon - Java

백준 11866번 요세푸스 문제 0 <S5> - 구현

현콩 2023. 11. 6. 12:00
728x90

백준 11866번 요세푸스 문제 0

 

K번째 숫자를 지워주면 된다. 쉽지용

queue를 활용해 줍니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import java.util.*;
 
public class Main { //11866번 요세푸스 문제 0 56%
    // 큐 활용.
    
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int idx = 0;
        StringBuilder sb = new StringBuilder();
        Queue<Integer> queue = new LinkedList<Integer>();    
        Queue<Integer> answer = new LinkedList<Integer>();
        // Input
        for (int i = 1; i <= n; i++) {            
            queue.add(i);
        }
        // logic
        while(answer.size() < n){ // 순열이 담길때까지 큐가 빌때까지나 동일
            idx ++;
            if(idx == k) { // k번째마다
                idx = 0;
                answer.add(queue.poll()); // 큐 맨앞을 answer에 넣기
            }else {
                int p = queue.poll(); // 아니라면 맨앞을 뒤로 옮기기 (원)
                queue.add(p);
            }            
        }
        //output
        sb.append("<"); // < x,x,x,x,x > 형태로 출력 위함
        while(!answer.isEmpty()) {
            sb.append(answer.poll());
            if(!answer.isEmpty()) {
                sb.append(", ");
            }
        }
        sb.append(">");
        System.out.println(sb);
        
        
        sc.close();
    }// main    
}// solution
cs
728x90
Comments