💡 Java 11
11866 요세푸스 문제 0 [Link]
Queue 를 이용해서 풀어봤다.
문제를 어떻게 풀지 고민하다가 인덱스, 큐 2가지 방법을 후보에 뒀는데 인덱스는 범위를 벗어나는 문제가 있어서 큐를 이용하는 것이 좋을 것 같아서 선택했다.
숫자를 모두 큐에 넣고 앞에서부터 순차적으로 k번째가 아니면 다시 넣고, k번째 수라면 빼서 기록하고 버리는 방법이다.
"<", ", ", ">"
와 같은 문자열들은 문제에서 출력 조건으로 제시했기 때문에 넣은 것이다.
크게 봤을 때 중요한 부분은 아니고, 큐를 활용한 것이 핵심이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Bj11866 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] inputNums = br.readLine().split(" ");
int n = Integer.parseInt(inputNums[0]);
int k = Integer.parseInt(inputNums[1]);
Queue<Integer> queue = new LinkedList<>();
int count = k;
StringBuilder result = new StringBuilder("<");
for (int i = 1; i <= n; i++) {
queue.add(i);
}
while (!(queue.size() == 1)) {
if (count > 1) {
queue.add(queue.poll());
count--;
continue;
}
result.append(queue.poll()).append(", ");
count = k;
}
result.append(queue.poll()).append(">");
System.out.println(result);
br.close();
}
}