728x90
SMALL
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
해당 문제는 원 순열로 Queue구조를 이용하면 간단하게 구현할 수 있다.
LinkedList가 Queue를 구현하기 때문에 LinkedList를 이용했다.
코드는 먼저 N명의 사람을 순차적으로 LinkedList에 담은 후
K-1번 앞의 사람을 뒤로 보내주고 다음의 K번째를 제거해준다.
해당 과정을 반복하며 queue가 빈 값이 될 때까지 진행 시켜주면 된다.
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception{
Queue<Integer> queue = new LinkedList<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int N = Integer.parseInt(str[0]);
int K = Integer.parseInt(str[1]);
for(int i=1 ; i<=N ; i++){
queue.add(i);
}
if(!queue.isEmpty()){ //N은 1보다 크거나 같기 때문에 안해주어도 되긴한다.
for(int i = 1 ; i< K ; i++){
queue.add(queue.remove());
}
}
StringBuilder sb = new StringBuilder("<").append(queue.remove());
while(!queue.isEmpty()){
for(int i = 1 ; i< K ; i++){
queue.add(queue.remove()); // K-1번 앞의 사람을 뒤로 보내주고
}
sb.append(", ").append(queue.remove()); // K번째 제거
}
sb.append(">");
System.out.println(sb);
}
}
728x90
LIST
'Coding test > Baekjoon' 카테고리의 다른 글
[백준][JAVA] 9012번: 괄호 (0) | 2023.08.14 |
---|---|
[백준][JAVA] 10807번: 개수 세기 (0) | 2023.08.14 |
[백준][JAVA] 26008번: 해시 해킹 (0) | 2023.08.12 |
[백준][JAVA] 10818번: 최소, 최대 (0) | 2023.08.09 |
[백준][JAVA] 1021번: 회전하는 큐 (0) | 2023.08.09 |