문제 해석
- 1번부터 N번 까지의 사람들이 원을 이루며 있는데, 그 N명의 사람 중 K번째를 제거하는 작업을 사라질 때까지 반복한다.(K번째를 삭제 후 K+1번이 1번이 된다. => 원형이니까)
- 그냥 글로 설명하면 무슨 말인지 모를 수 있다. 그림으로 문제를 해석하면 아래와 같다.
코드
import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static Queue<Integer> queue = new LinkedList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st =new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
br.close();
for(int i = 1; i <= N; i++){
queue.add(i);
}
sb.append("<");
while(queue.size() > 1){
for(int i = 0; i < K - 1; i++) {
queue.offer(queue.poll());
}
sb.append(queue.poll()).append(", ");
}
sb.append(queue.poll()).append(">");
System.out.println(sb);
}
}
결과
느낀 점
- 큐 구현 클래스 사용하면 너무 쉽게 풀리는 문제인데 처음에 기본 배열로 수행하려다가 애 좀 먹고 해결 법을 못찾아 제공하는 클래스 사용했다. (클래스한테 져버렸다...)