728x90
문제
https://www.acmicpc.net/problem/1158
풀이
1. 큐에 순서대로 삽입
2. flag라는 변수를 사용해 3일때마다 번호를 제거
3. 제거 후에 flag를 0으로 초기화
4. 큐의 사이즈가 0이 될 때까지 반복
코드
// 1158번 요세푸스 문제
// https://www.acmicpc.net/problem/1158
package BAEKJOON;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Num1158_요세푸스문제 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
Queue<Integer> queue = new LinkedList<>();
for (int i = 1; i <= N; i++) {
queue.offer(i);
}
ArrayList<Integer> arrayList = new ArrayList<>();
int flag = 1;
while (true) {
if (flag == K) {
arrayList.add(queue.poll());
flag = 1;
} else {
queue.offer(queue.poll());
flag++;
}
if (queue.isEmpty()) {
break;
}
}
StringBuilder sb = new StringBuilder();
sb.append("<");
for (int i = 0; i < arrayList.size(); i++) {
sb.append(arrayList.get(i)).append(", ");
}
sb.setLength(sb.length() - 2);
sb.append(">");
System.out.println(sb);
}
}
728x90