백준(실버5) - 1158. 요세푸스 문제(실버5)
큐를 이용하면 쉽게 풀 수 있다.
1. n만큼의 사람을 queue에 넣어준다.
2. queue에 있는 사람이 한명 남을 때까지 -> 출력때문에 isEmpty를 안썼다.
3. 앞에 있는 사람을 k-1번 빼주는 것을 반복해준다. (이때, 빼준 사람은 다시 queue에 넣어준다)
4. while문 안의 for문을 나와서 빼주는 사람이 k번째 사람이다!
package com.study.classAlgo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ1158 {
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());
StringBuilder sb = new StringBuilder();
Queue<Integer> queue = new LinkedList<>();
for(int i=1; i<=n; i++) {
queue.add(i);
}
sb.append("<");
while(queue.size()-1 >0) {
for(int i=0; i<k-1; i++) {
int temp = queue.poll();
queue.add(temp);
}
sb.append(queue.poll()+", ");
}
sb.append(queue.poll());
sb.append(">");
System.out.println(sb);
}
}