티스토리 뷰

1158. 요세푸스 문제

www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)

www.acmicpc.net

 

// 210209 

import java.io.*;
import java.util.*;

public class Main_1158_요세푸스문제 {

	public static void main(String[] args) throws Exception {
		System.setIn(new FileInputStream("res/input_1158_요세푸스문제.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		StringTokenizer str = new StringTokenizer(br.readLine(), " ");
		StringBuilder sb = new StringBuilder();
		sb.append("<");
		
		int N = Integer.parseInt(str.nextToken());
		int K = Integer.parseInt(str.nextToken());
		
		Queue<Integer> queue = new LinkedList<Integer>();

		for(int i=1; i<=N; i++) {
			queue.offer(i);
		}
		
//		int idx = 1;
		
//		while (! queue.isEmpty()) {
//			if (idx % K == 0) {
//				sb.append(queue.poll() + ", ");
//			} else {
//				queue.offer(queue.poll());
//			}
//			idx++;
//		}
		
		while (! queue.isEmpty()) {
			
			for(int i=0; i<K-1; i++) {
				queue.offer(queue.poll());
			}
			
			sb.append(queue.poll() + ", ");
		}
		
		sb.setLength(sb.length()-2);
		sb.append(">");
		System.out.println(sb.toString());
		br.close();
	} // main

}

 

중간 원소를 삭제하는 작업이 반복되기 때문에 처음에는 링크드 리스트를 생각했다. 

그러나 숫자가 원을 이루는 상황을, 맨 앞의 숫자가 맨 뒤로 가서 붙는다는 상황으로 생각한다면 큐로 푸는 것이 훨씬 편했다.

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 2577. 숫자의 개수  (0) 2021.02.09
[BJ] 2563. 색종이  (0) 2021.02.09
[BJ] 2164번: 카드 2  (0) 2021.02.08
[BJ] 2493 탑  (0) 2021.02.04
[BJ] 17478. 재귀함수가뭔가요  (0) 2021.02.01
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함