728x90
반응형
Java 문제풀이
import java.util.Scanner;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n= scan.nextInt();
int k = scan.nextInt();
Queue<Integer> q = new LinkedList<>();
for(int i=0;i<n;i++) {
q.add(i+1);
}
System.out.print("<");
while (q.size()>0){
// 맨 앞에있던 숫자를 poll한 후 큐에 새로 추가하여 큐의 시작을 변경
for(int i=0;i<k-1;i++) {
q.add(q.poll());
}
System.out.print(q.poll());
if (q.size()>0) {
System.out.print(", ");
}
}
System.out.print(">");
}
}
요세푸스 문제를 더욱 효율적으로 풀어봤습니다.
파이썬으로 풀었을때는 어떻게 풀었는지 기억이 안나는데 이 방법이 가장 효율적인 것 같습니다.
큐를 선언하여 지정된 수 만큼의 숫자를 순차적으로 큐에 추가합니다.
k번째에 세어지는 숫자가 순차적으로 제거되기 떄문에 k-1번의 횟수만큼 큐의 맨 앞에 있는 숫자를 지웠다가 새로 추가하여 뒤로 보내는 작업을 합니다. 그러면 맨 앞에 있는 숫자가 k번째 숫자가 되기 때문에 그 숫자를 poll해줍니다.
출력은 <?, ?, ?, ?>형태로 하도록 되어있기 때문에 지저분해졌지만 문제는 풀었습니다..ㅎㅎ
728x90
반응형
'코딩문제풀이 > 백준' 카테고리의 다른 글
[백준 2675번] 문자열반복 Java 풀이 (0) | 2021.09.02 |
---|---|
[백준 1966번] 프린터 큐 Python 풀이 (0) | 2021.07.09 |
[백준 10773번] 제로 Python 풀이 (0) | 2021.07.09 |
[백준 2941번] 크로아티아 알파벳 Python 풀이 (0) | 2021.07.09 |
[백준 1874번] 스택 수열 Python 풀이 (0) | 2021.07.09 |