[백준/Java] 1158번 요세푸스

Yujin·2025년 6월 18일

CodingTest

목록 보기
8/51

문제

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

문제 접근 방법

  1. 1부터 N(사람수) 까지 queue에 추가한다
  2. K의 약수 -> 제거 대상 ! (append로 답에 더하기)
  3. K의 약수가 아니면 원래 에서 삭제 하고 다시 queue에 추가한다
    -> queue의 크기가 1이 아닐때 까지 이 과정을 반복한다.

나의 코드

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt(); // 사람 수
        int K = sc.nextInt(); // 제거 순서
        Queue<Integer> queue = new LinkedList<>();

        StringBuilder sb = new StringBuilder();
        sb.append("<");
        for(int i = 1; i <= N; i++){
            queue.add(i); //1 부터 N 까지 add
        }
        while(!queue.isEmpty()) {
            for (int i = 1; i <= K; i++) {
                if (i % K == 0) { // K의 약수 -> 제거 대상 !!
                    if(queue.size() == 1){ //마지막 값을 더하는거라면 ,를 제거하고 넣기 위해서
                        sb.append(queue.remove()); 
                    }
                    else{
                        sb.append(queue.remove()+ ", ");
                    }
                }
                else{ //만약 K의 약수가 아니면 queuq에 다시 추가한다
                    queue.add(queue.remove());
                }
            }
        }
        sb.append(">");
        System.out.println(sb);
    }
}

0개의 댓글