자료구조&알고리즘/백준
11866번: 요세푸스 문제 0 [JAVA]
yong_ღ'ᴗ'ღ
2023. 7. 16. 22:26
https://www.acmicpc.net/problem/11866
11866번: 요세푸스 문제 0
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 1,000)
www.acmicpc.net
접근 방식)
1) 원형으로 사람들이 돌면서 빠지는 거니까, Queue를 만들고 1 ~ N까지 추가한다.
2) Queue가 빌 때까지 반복하면서 count를 증가시킨다.
count가 K와 같으면, queue에서 빼고, count = 1로 초기화
count가 K가 아니면, queue의 앞에서 빼서, 다시 뒤에 넣어준다. → queue.add(queue.poll())
package codingTestStudy.week1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class B_11866 {
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());
// 큐에 1 ~ N까지 추가
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= N; i++)
queue.add(i);
int count = 1;
StringBuilder sb = new StringBuilder();
sb.append("<");
while (!queue.isEmpty()) {
if (count % K == 0) {
sb.append(queue.poll()).append(", ");
else
queue.add(queue.poll());
count++;
}
sb.replace(sb.length() - 2, sb.length(), ">");
System.out.println(sb);
}
}