슬기로운 개발생활

[백준] 1158번 요세푸스 문제 자바(Java)

by coco3o
반응형

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

1158번: 요세푸스 문제

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

www.acmicpc.net


정답 코드

import java.io.*;
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));
        StringTokenizer st = new StringTokenizer(br.readLine());

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

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

        // 1번부터 N번까지 N명의 사람
        for (int i = 1; i <= n; i++) {
            q.offer(i);
        }

        StringBuilder sb = new StringBuilder();
        sb.append("<");
        // k-1까지 처음에 있던 값을 맨 뒤로 보낸다.
        while (q.size() != 1) {
            for (int i = 0; i < k - 1; i++) {
                q.offer(q.poll());
            }
            sb.append(q.poll()).append(", ");
        }
        // 마지막 값
        sb.append(q.poll()).append(">");
        System.out.println(sb);
    }
}

설명

입력 : 7 3

7 6 5 4 3 2 1

k -1 = 2
2 1 7 6 5 4 3
<3,
2 1 7 6 5 4

k -1 = 2
5 4 2 1 7 6
<3, 6,
5 4 2 1 7

k -1 = 2
1 7 5 4 2
<3, 6, 2,
1 7 5 4

k-1 = 2
5 4 1 7
<3, 6, 2, 7
5 4 1

k - 1 = 2
4 1 5
<3, 6, 2, 7, 5,
4 1
1 4
<3, 6, 2, 7, 5, 1, 4>
반응형

블로그의 정보

슬기로운 개발생활

coco3o

활동하기