본문 바로가기

백준

이런저런 문제들 #1158: 요세푸스 문제 [JAVA]

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

 


 

 

 

 

문제 접근

 

 

 

 

K-1번째까지 큐에서 꺼낸 뒤 다시 넣는다.(앞에 있던 걸 뒤로 보냄.)

K번째는 큐에서 꺼낸다.

큐의 사이즈가 1이 될 때까지 반복(남은 하나는 나중에 꺼내서 출)

 

[ 참고 ] https://steady-coding.tistory.com/21

 

 

 

 

 

 

 

 

 

 

 

코드

 

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());

		int N = Integer.parseInt(st.nextToken());
		int K = Integer.parseInt(st.nextToken());

		Queue<Integer> q = new LinkedList<>();

		StringBuilder sb = new StringBuilder();
		sb.append("<");

		for (int i = 1; i <= N; i++) {
			q.offer(i);
		}

		while (q.size() != 1) {

			for (int i = 0; i < K - 1; i++) {
				q.offer(q.poll());
			}

			sb.append(q.poll() + ", ");

		}

		sb.append(q.poll() + ">");

		System.out.println(sb);

	}

}