본문 바로가기

백준

1158번: 요세푸스 문제(Java)

Queue를 사용해 풀었다. 

 

우선 필요한 변수를 선언하고 데이터를 입력받아 Queue에 넣는다.

Queue<Integer> queue = new LinkedList<>();
StringBuilder result = new StringBuilder("<");
Scanner scanner = new Scanner(System.in);
int k = scanner.nextInt();
int v = scanner.nextInt();
for (int i = 1; i <= k; i++) {
    queue.add(i);
}

 

그다음, Queue가 빌 때까지 다음을 반복한다.

1. v-1번만큼 Queue를 poll()하고, 그 값을 다시 add()한다.(v 번째 수가 필요하므로)

2. result에 Queue를 poll()해서 넣는다.

 

그림으로 나타내면 다음과 같다.

 

코드로 써 보자

while (!queue.isEmpty()) {
    for (int i = 0; i < v - 1; i++) {
        queue.add(queue.poll());
    }
    result.append(queue.poll()).append(", ");
}
result.delete(result.length() - 2, result.length());
result.append(">");
System.out.println(result);

 

 

 

 

 

 

결과 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Queue<Integer> queue = new LinkedList<>();
        StringBuilder result = new StringBuilder("<");
        Scanner scanner = new Scanner(System.in);
        int k = scanner.nextInt();
        int v = scanner.nextInt();

        for (int i = 1; i <= k; i++) {
            queue.add(i);
        }

        while (!queue.isEmpty()) {
            for (int i = 0; i < v - 1; i++) {
                queue.add(queue.poll());
            }
            result.append(queue.poll()).append(", ");
        }
        result.delete(result.length() - 2, result.length());
        result.append(">");
        System.out.println(result);
    }
}

'백준' 카테고리의 다른 글

11286번:절댓값 힙(Java)  (0) 2023.02.20
1302번: 베스트셀러(Java)  (0) 2023.02.19
11399번: ATM(Java)  (0) 2023.02.12
1406번: 에디터(Java)  (0) 2023.02.07
1269번: 대칭 차집합(Java)  (2) 2023.01.31