자바/백준

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

슈슈버거 2022. 11. 24. 16:42

문제

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net


내가 작성한 코드

import javax.print.DocFlavor;
import javax.swing.*;
import java.io.*;
import java.util.*;

public class qor11866 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int num = Integer.parseInt(st.nextToken());
        int time = Integer.parseInt(st.nextToken());

        ArrayList<Integer> people = new ArrayList<>();
        HashSet<Integer> choice = new HashSet<>();
        ArrayList<Integer> pre = new ArrayList<>();

        bw.write("<");

        for(int i = 1; i<=num; i++){
            people.add(i);
            pre.add(i);
        }

        int index = time-1;

        int now = people.get(index);

        choice.add(now);
        people.remove(index);
        pre.remove(pre.indexOf(now));

        index += time-1;

        String result = "";

        result += now+"";

        while(!pre.isEmpty()){
            while(index >= people.size()){
                people.addAll(pre);
            }

            now = people.get(index);
            if(choice.contains(now)){
                break;
            }
            choice.add(now);
            people.remove(index);
            pre.remove(pre.indexOf(now));

            index += time-1;
            result += ", "+now;
        }

        result = result.trim();
        bw.write(result+">");
        bw.close();
    }
}