// https://www.acmicpc.net/problem/11866
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Problem11866 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
Queue<Integer> q = new LinkedList<>();
for (int i = 1; i <= n; i++) {
q.add(i);
}
System.out.print("<");
while (q.size() > 1) {
for (int i = 1; i < k; i++) {
q.add(q.poll());
}
System.out.print(q.poll() + ", ");
}
System.out.print(q.poll() + ">");
}
}
▶ 문제를 보자마자 일단 큐가 생각났고, 그래서 큐를 사용해 직접 풀어보았다. 그런데 요세푸스 문제에 대해 찾아보니, 큐를 사용하는 방법 외에도 좋은 방법들이 많았다. 지금 내가 작성한 코드는 시간복잡도가 O(n * k)이므로 효율적인 알고리즘은 아니라고 판단한다. 추후 개선된 코드로 다시 작성하도록 하겠다.
'개인학습 > 알고리즘' 카테고리의 다른 글
[Java] BOJ 13909: 창문 닫기와 힙 메모리 한도 (1) | 2025.02.17 |
---|---|
[Java] BOJ 1654: 이진 탐색, 이분 탐색 (Binary Search) (1) | 2025.02.07 |
[Java] BOJ 4134: 에라토스테네스의 체 (1) | 2025.02.04 |
[Java] BOJ 10814: 나이순 정렬, 2차원 배열 (1) | 2025.01.22 |
[Java] BOJ 11650: 람다 표현식, 정렬 조건 부여하기 (1) | 2025.01.16 |