알고리즘
백준 1158 요세푸스 문제
킨글
2024. 9. 7. 12:14
설명
1. queue를 이용해서 원으로 만들어준다.
즉, 빼면 다시 넣어준다.
2. idx가 K가 될 때에 list에 pollNum을 넣어주었다.
3. 이외에는 다시 queue에 넣어주어 원으로 만들어주었다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
// 1158
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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);
}
int idx = 1;
List<Integer> list = new ArrayList<>();
while(!queue.isEmpty()) {
Integer pollNum = queue.poll();
if(idx != 0 && idx % K == 0) {
list.add(pollNum);
} else {
queue.add(pollNum);
}
idx++;
}
bw.write("<");
for (int i = 0; i < list.size(); i++) {
bw.write(list.get(i).toString());
if(i != list.size() -1) {
bw.write(", ");
}
}
bw.write(">");
bw.flush();
bw.close();
br.close();
}
}