본문 바로가기
코드문제풀이/JAVA

[자바] 11866번 요세푸스 문제 0

by 똥쟁이핑크 2023. 7. 28.

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

 

11866번: 요세푸스 문제 0

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

www.acmicpc.net

 

문제 

요세푸스 문제는 다음과 같다.

1번부터 N번까지 N명의 사람이 원을 이루면서 앉아있고, 양의 정수 K(≤ N)가 주어진다. 이제 순서대로 K번째 사람을 제거한다. 한 사람이 제거되면 남은 사람들로 이루어진 원을 따라 이 과정을 계속해 나간다. 이 과정은 N명의 사람이 모두 제거될 때까지 계속된다. 원에서 사람들이 제거되는 순서를 (N, K)-요세푸스 순열이라고 한다. 예를 들어 (7, 3)-요세푸스 순열은 <3, 6, 2, 7, 5, 1, 4>이다.

N과 K가 주어지면 (N, K)-요세푸스 순열을 구하는 프로그램을 작성하시오.

 

입력

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

 

출력

예제와 같이 요세푸스 순열을 출력한다.

 

나의 문제 풀이

1) 삽입, 삭제가 자유로워야 해서 LinkedList를 사용했다.

2) NumberFormat 에러가 발생하였고 변수에 n, m에 br.readLine()을 집어 넣었기 때문에 StringTokenizer를 사용하여 공백 단위를 잘라 토큰화 하여 값을 받았다. (들어 오는 값은 7 3)

3) queue에 값을 먼저 집어 넣었고 이후 queue의 사이즈가 1이 아니면 start값과 m을 비교하여 값을 뺄 수 있도록 하였다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
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());
        Queue<Integer> queue = new LinkedList<>();

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int start = 1;

        for(int i = 1; i <= n; i++){
            queue.add(i);
        }
        sb.append("<");
        while(queue.size() != 1){
            if(start == m){
                sb.append(queue.poll()).append(", ");
                start = 1;
            }
            else {
                queue.offer(queue.poll());
                start++;
            }
        }
        sb.append(queue.poll()).append(">");
        System.out.println(sb);
    }
}

'코드문제풀이 > JAVA' 카테고리의 다른 글

[자바] 1037번 약수  (0) 2023.07.29
[자바] 11047번 동전 0  (0) 2023.07.29
[자바] 11279번 최대 힙  (0) 2023.07.28
[자바] 4949번 균형잡힌 세상  (0) 2023.07.28
[자바] 1874번 스택 수열  (0) 2023.07.27