백준 | 11866 요세푸스 문제 0 [Java]

yeonk·2022년 11월 9일
0

algorithm

목록 보기
87/88
post-thumbnail

💡 Java 11






🔗 문제


11866 요세푸스 문제 0 [Link]






💻 코드


Queue 를 이용해서 풀어봤다.
문제를 어떻게 풀지 고민하다가 인덱스, 큐 2가지 방법을 후보에 뒀는데 인덱스는 범위를 벗어나는 문제가 있어서 큐를 이용하는 것이 좋을 것 같아서 선택했다.
숫자를 모두 큐에 넣고 앞에서부터 순차적으로 k번째가 아니면 다시 넣고, k번째 수라면 빼서 기록하고 버리는 방법이다.

"<", ", ", ">" 와 같은 문자열들은 문제에서 출력 조건으로 제시했기 때문에 넣은 것이다.
크게 봤을 때 중요한 부분은 아니고, 큐를 활용한 것이 핵심이다.


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

public class Bj11866 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] inputNums = br.readLine().split(" ");
        int n = Integer.parseInt(inputNums[0]);
        int k = Integer.parseInt(inputNums[1]);

        Queue<Integer> queue = new LinkedList<>();
        int count = k;
        StringBuilder result = new StringBuilder("<");

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

        while (!(queue.size() == 1)) {
            if (count > 1) {
                queue.add(queue.poll());
                count--;
                continue;
            }
            result.append(queue.poll()).append(", ");
            count = k;
        }
        result.append(queue.poll()).append(">");

        System.out.println(result);

        br.close();
    }
}

0개의 댓글