풀이방법
사용된 것:
Queue
2022.04.21
큐를 이용하여 풀었다.
먼저 큐에 1부터 N까지의 수를 순서대로 넣는다.
가장 앞 사람을 poll()하여 맨 뒤에 add()하는 작업을 K-1번 반복한다.
그럼 제거해야하는 사람이 가장 앞에 오게 된다. 한 명을 poll()하여 정답 배열에 추가한다.
이 과정을 N번 반복하면 된다.
코드
Java(2022.04.21)
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
//n과 k 읽어오기
int n = sc.nextInt();
int k = sc.nextInt();
//아직 제거되지 않은 사람들을 저장할 큐
Queue<Integer> queue = new LinkedList<Integer>();
for(int i = 1; i<n+1; i++) queue.add(i);
//요세푸스 순열을 저장할 배열
int[] result = new int[n];
//요세푸스 순열 생성
for(int i = 0; i<n; i++) {
for(int j = 0; j<k-1; j++) {
int temp = queue.poll();
queue.add(temp);
}
result[i] = queue.poll();
}
//정답 출력
StringBuilder sb = new StringBuilder();
sb.append("<");
for(int i = 0; i<n-1; i++) sb.append(result[i] + ", ");
sb.append(result[n-1]);
sb.append(">");
System.out.print(sb);
sc.close();
}
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
#2292 : 벌집 (0) | 2022.04.23 |
---|---|
#1018 : 체스판 다시 칠하기 (0) | 2022.04.21 |
#10816 : 숫자 카드 2 (0) | 2022.04.19 |
#11050 : 이항 계수 1 (0) | 2022.04.19 |
#1259 : 팰린드롬수 (0) | 2022.04.17 |