이번 문제도 큐의 기본적인 활용을 묻는 문제였다.
요세푸스 순열을 구하는 방법은 k 번째 사람을 제거하고, 그 자리에서 k 번째 사람을 계속 제거해 나감으로써 제거되는 순서를 출력하면 되는 간단한 문제였다.
큐를 사용하면 쉽게 해결할 수 있었다.
이제 백준의 실버 낮은 단계 문제정도는 빠른 시간안에 해결할 수 있는 것 같다!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
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());
Queue<Integer> queue = new LinkedList<>();
for(int i=1;i<=n;i++)
queue.add(i);
sb.append("<");
while(true){
for(int i=0;i<k-1;i++){
int temp = queue.remove();
queue.add(temp);
}
int yose = queue.remove();
if(queue.isEmpty()){
sb.append(yose);
break;
}
sb.append(yose+", ");
}
sb.append(">");
System.out.println(sb);
}
}