문제


일단 생각하기!
- N명의 사람 중 K번째 사람을 제거하고 제거한 이후의 K번재 사람을 제거하는 과정이 반복되므로 Queue를 사용하는 것이 용이하다고 생각했다. K-1번째 사람은 enQueue 한 뒤, deQueue하고 K번째 사람은 제거하는 과정을 반복했다.
- 문제 아래의 알고리즘 분류를 통해 Queue를 이용하는 문제임을 알아냈다. 언제쯤 문제만 보고 바로 파악할 수 있을련지 T.T
풀이
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 BJ_1158_요세푸스문제_김유나 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
Queue<Integer> que = new LinkedList<>();
for (int i = 1; i <= N; i++) {
que.offer(i);
}
sb.append("<");
for (int i = 0; i < N; i++) {
for (int j = 0; j < K - 1; j++) {
que.offer(que.peek());
que.poll();
}
sb.append(que.peek());
if (i == N - 1) sb.append(">");
else sb.append(", ");
que.poll();
}
System.out.println(sb);
}
}