P1158: 요세푸스 문제

wnajsldkf·2022년 12월 26일
0

Algorithm

목록 보기
20/58
post-thumbnail

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

설명

Queue에서 원소를 집어넣고, 빼는 메서드를 사용하면 간편하게 풀이할 수 있었다.

코드

package Algorithm.P1158;

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

public class P1158 {
    static int N, K;
    static Queue<Integer> circle = new LinkedList<>();

    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/Algorithm/P1158/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

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

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

        sb.append('<');

        while (circle.size() != 1) {
        	// 맨 앞부터 (k-1)번째까지 원소를 반환하면서 제거하고, 큐에 다시 넣는다.
            for (int i = 0; i < K - 1; i++) {
                circle.offer(circle.poll());
            }
            // k번째 원소를 반환하여 출력하며 제거한다.
            sb.append(circle.poll() + ", ");
        }
        // 맨 마지막 원소를 , 가 없으니 따로 출력한다.
        sb.append(circle.poll() + ">");

        bw.write(sb.toString() + "\n");
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
https://mywnajsldkf.tistory.com -> 이사 중

0개의 댓글