곽로그

[백준1158, Java] 요세푸스 문제 본문

알고리즘/백준

[백준1158, Java] 요세푸스 문제

일도이동 2020. 10. 20. 22:19
반응형

문제

 

www.acmicpc.net/problem/1158

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;

public class Main {
    public static void main(String[] args) throws  Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

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

        Josephus josephus = new Josephus(N, K);

        while(!josephus.circle.isEmpty()){
            josephus.next();
        }

        ArrayList<Integer> jArray = josephus.getJArray();
        bw.write("<");
        for(int index = 0 ; index<jArray.size(); index++){
            if(index==jArray.size()-1){
               bw.write(String.valueOf(jArray.get(index)));
            }
            else{
                bw.write(jArray.get(index)+", ");
            }
        }
        bw.write(">");
        bw.flush();



    }
}
class Josephus{
    LinkedList<Integer> circle;
    ArrayList<Integer> jArray;
    int N;
    int K;
    int pointer;

    Josephus(int N, int K){
        this.N = N;
        this.K = K;
        this.pointer = 0;

        circle = new LinkedList<>();
        for(int num = 1; num<=N ; num++) {
            circle.add(num);
        }

        jArray = new ArrayList<>();

    }

    public void next(){
        pointer += (K-1);
        pointer = pointer%circle.size();
        jArray.add(circle.remove(pointer));
    }

    public int getPointer(){
        return pointer;
    }

    public ArrayList<Integer> getJArray(){
        return jArray;
    }

    public LinkedList<Integer> getCircle(){
        return circle;
    }
}

반응형
Comments