https://www.acmicpc.net/problem/1158
문제만을 읽고서는 이해가 잘 되지 않아 따로 찾아 보았다.
먼저, 문제에서는 인원의 수 n과 k번 째를 제공 해주었다. 예시로, 7명의 인원을 시작으로, 3번 째 사람을 계속해서 제거한다. 처음엔 3번 째, 그리고 3번 째에서 또 다시 3번 째 즉, 6번 사람이 제거되고, 6번 에서 또 다시 3 번째, 즉 2번 사람이다. 이를 바탕으로 구조를 그려보면
1 2 3 4 5 6 7 1 2 4 5 6 7 3 1 2 4 5 7 3 6 1 4 5 7 3 6 2 1 4 5 3 6 2 7 1 4 3 6 2 7 5 4 3 6 2 7 5 1 3 6 2 7 5 1 4
위와 같은 형식으로 구현을 해보았다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;
public class Main {
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());
LinkedList<Integer> list = new LinkedList<>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
sb.append('<');
while(!list.isEmpty()) {
for (int i = 0; i < k; i++) {
if (i == k-1) { // 1번 사람 부터 시작하기 때문에 k-1 과 매치한다.
if (list.size() == 1) { // 마지막 인원은 쉼표를 제외하고 넣어준다.
sb.append(list.remove());
} else {
sb.append(list.remove() + ", ");
}
} else {
list.add(list.remove());
}
}
}
sb.append('>');
System.out.println(sb);
}
}