이 문제는 요세푸스 문제0번과 똑같이 제출해도 통과할 수 있습니다. 즉 naive하게 문제에서 주어진대로 구현하면 통과할 수 있습니다. 하지만 이 문제는 queue를 이용하여 작성해보았습니다. queue에서 뺄 필요 없이 ArrayList를 이용하면 뺏다 넣었다 하지 않기 때문에 더 빠르게 가능합니다.
class Main { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), " "); int n = Integer.parseInt(st.nextToken()); int k = Integer.parseInt(st.nextToken()); boolean[] visited = new boolean[n+1];
int idx = k;
int flag = n;
System.out.print("<");
while(flag > 1){
int cnt = 0; // 몇 번째 사람인지
System.out.print(idx + ", ");
// 사람 제거
visited[idx] = true;
// 남은 사람수
flag--;
while(true){
// 원으로 되어있으므로 n을 넘어가는 경우 처리해준다.// 0인 경우는 index는 1부터 시작이므로 1로 해준다.
idx = ((idx+1) % (n+1)) == 0 ? 1 : (idx+1) % (n+1);
// 죽지 않은 사람 체크if(!visited[idx])
cnt++;
// k번째 사람을 찾은 경우if(cnt == k)
break;
}
}
System.out.println(idx + ">");
}