[백준] 11866번 : 오세푸스 문제 0

김건우·2023년 9월 14일
0

문제 풀이

목록 보기
20/62

요세푸스 문제 0


풀이 방법

이번 문제도 큐의 기본적인 활용을 묻는 문제였다.

요세푸스 순열을 구하는 방법은 k 번째 사람을 제거하고, 그 자리에서 k 번째 사람을 계속 제거해 나감으로써 제거되는 순서를 출력하면 되는 간단한 문제였다.

큐를 사용하면 쉽게 해결할 수 있었다.

이제 백준의 실버 낮은 단계 문제정도는 빠른 시간안에 해결할 수 있는 것 같다!


코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine()," ");

        int n = Integer.parseInt(st.nextToken());
        int k = Integer.parseInt(st.nextToken());

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

        for(int i=1;i<=n;i++)
            queue.add(i);

        sb.append("<");
        while(true){
            for(int i=0;i<k-1;i++){
                int temp = queue.remove();
                queue.add(temp);
            }
            int yose = queue.remove();
            if(queue.isEmpty()){
                sb.append(yose);
                break;
            }
            sb.append(yose+", ");
        }
        sb.append(">");

        System.out.println(sb);
    }
}
profile
공부 정리용

0개의 댓글