문제 출처 : https://www.acmicpc.net/problem/11866
문제
설명
자료구조 Queue(FIFO)를 사용하는 문제였습니다. 물론 문제를 읽고 바로 큐를 떠올리기는 쉽지 않습니다만, "원(Circle)형 문제"이기 때문에 K번째 사람 전까지의 사람들을 dequeue & enqueue하면 K번째 사람을 제거하고 나서도 원에서의 순서가 그대로 유지되기 때문에 큐를 사용하면 간단하게 문제가 해결됩니다.
코드
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class BOJ11866_Josephus {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt(), K=sc.nextInt();
Queue<Integer> que = new LinkedList<>();
StringBuilder sb = new StringBuilder();
int idx=0;
for(int i=1; i<=N; i++) {
que.add(i);
}
sb.append("<");
while(!que.isEmpty()) {
for(int i=0; i<K-1; i++) { //제거할 것 이전의 요소들을 dequeue & enqueue
int n = que.peek(); //맨 첫번째 값
que.remove();
que.add(n);
}
sb.append(que.peek() + ", ");
que.remove();
}
sb.setLength(sb.length()-2); //끝에 쉼표와 공백 제거
sb.append(">");
System.out.println(sb);
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준][JAVA] 15900 : 나무 탈출 (0) | 2021.10.03 |
---|---|
[백준][JAVA] 1260 : DFS와 BFS (0) | 2021.09.26 |
[BOJ][JAVA] 10773 - 제로 (0) | 2021.09.22 |
[BOJ][JAVA] 7568 - 덩치 (0) | 2021.09.21 |
[BOJ][JAVA] 1181 - 단어 정렬 (0) | 2021.09.21 |