티스토리 뷰

728x90

문제

https://www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

풀이 및 소스코드

 

원형큐처럼 생각하고 풀었다.

k 번째가 아닌건 빼고 바로 넣어주는 것을 반복했다.

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


class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
		Queue<Integer> q = new LinkedList<Integer>();
		
		st = new StringTokenizer(br.readLine());
		int n = Integer.parseInt(st.nextToken());
		int k = Integer.parseInt(st.nextToken());
		for(int i=1;i<=n;i++) {
			q.add(i);
		}
		sb.append("<");
		while(true) {
			for(int i=1;i<=k;i++) {
				if(i%k==0) {
					sb.append(q.remove());
					if(!q.isEmpty()) sb.append(", ");
				}else {
					q.add(q.remove());
				}
			}
			if(q.isEmpty()) break;
		}
		sb.append(">");
		System.out.println(sb);
	}
}
반응형