import java.io.*;
import java.util.*;
class Main {
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strs = br.readLine().split(" ");
int N = Integer.parseInt(strs[0]);
int K = Integer.parseInt(strs[1]);
Queue < Integer > queue = new LinkedList();
StringBuilder sb = new StringBuilder();
sb.append("<");
for (int i = 0; i < N; i++) {
queue.offer(i + 1);
}
while (queue.size() > 1) {
for (int i = 0; i < K - 1; i++) {
int value = queue.poll();
queue.offer(value);
}
sb.append(queue.poll()).append(", ");
}
sb.append(queue.poll()).append(">");
System.out.println(sb);
}
}
해결방법
처음 문제 접근을 하였을 때 List
로 구현하면 쉽게 문제를 해결할 수 있겠다고 생각하여 접근하였다.
하지만 리스트의 사이즈가 2 이하일 경우 인덱스를 처리하면서 문제가 발생하였고, 그런 이유 때문에 Queue
를 사용해서 구현하였다.
Queue
를 Integer
타입으로 선언하고 offer
메소드를 사용하여 Queue
에 1부터 N까지 값을 저장하였다.
Queue
의 사이즈가 1보다 크고, i
가 0부터 K - 1번째까지 Queue
에 값을 뽑아 value
에 저장하고 그것을 다시 Queue
에 추가하였다. 즉 [1, 2, 3, 4, 5, 6, 7]의 배열이 있고 K의 값이 3일 경우, [1, 2]의 값을 Queue
에 추가하여 [3, 4, 5, 6, 7, 1, 2]의 형태로 만들고 StringBuilder
에 K 번째 값을 추가하였다.
while
반복문을 수행 후 Queue
에는 하나의 값이 남아있는데, 마찬가지로 StringBuilder
에 남아있는 데이터도 추가한다.