[Java] 백준 11866번 : 요세푸스 문제 0

11866번 : 요세푸스 문제 0
HootJem's avatar
Aug 16, 2024
[Java] 백준 11866번 : 요세푸스 문제 0
notion image

접근법

큐를 사용하여 1부터 N 까지 나열된 수에서 K 번째 수 마다 차례로 뽑아낸 수열을 출력하는 것. k번째 수가 되기 직전까지 맨 앞의 원소를 k-1 번 꺼내고 (poll) 꺼내온 원소들을 맨 뒤로 넣는다.(offer) 그리고 k 번째로 뽑힌(poll)원소는 출력한다. {1,2,3,4,5,6,7} -> {2,3,4,5,6,7,1} {2,3,4,5,6,7,1} -> {3,4,5,6,7,1,2} {3,4,5,6,7,1,2} -> 3 출력
이때 신경쓸 것은 출력 형태. StringBuilder 에 < 를 추가하고 poll, 을 추가한 뒤 마지막에 추가된 , 제거를 위해 delete 를 한다.

풀이

public class Main_11866 { public static void main(String[] args)throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); String[] input = br.readLine().split(" "); int n = Integer.parseInt(input[0]); int k = Integer.parseInt(input[1]); Queue<Integer> queue = new LinkedList<>(); for(int m =1; m<=n ; m++) { queue.offer(m); } StringBuilder sb = new StringBuilder(); sb.append("<"); while(!queue.isEmpty()) { for (int i = 0; i < k - 1; i++) { queue.offer(queue.poll()); } sb.append(queue.poll()).append(", "); } sb.delete(sb.length() - 2, sb.length()); sb.append(">"); bw.write(sb.toString()); bw.flush(); bw.close(); br.close(); } }
Share article

[HootJem] 개발 기록 블로그