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 |