본문 바로가기

코딩테스트/백준

[백준-자바] 11866번 요세푸스 문제 0 / 2022.07.16

 

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder(); //요세푸스 순열 출력
        sb.append('<');
        Queue<Integer> queue = new LinkedList<>();
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        //큐에 1부터 N까지 offer
        for(int i=1; i<=N; i++){
            queue.offer(i);
        }
        int index = 0; //K번째를 구하기 위한 변수
        //큐가 빌 때까지 반복
        while(!queue.isEmpty()){
            index++;
            if(index == K){ //index가 K번째 이면
                //맨 앞 숫자를 sb에 추가해줌
                sb.append(queue.poll()).append(", ");
                index = 0; //index는 다시 0
            } else{
                //index가 K번째가 아니라면 맨 앞 숫자를 맨 뒤로 넣어줌
                queue.offer(queue.poll());
            }
        }
        //맨 뒤에 넣어준 ,와 공백을 > 로 바꿔줌
        sb.replace(sb.length()-2, sb.length()-1, ">");

        System.out.println(sb);
    }
}