[백준/JAVA] 11866번 요세푸스 문제 0

정은아·2024년 2월 11일
post-thumbnail

내 풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws Exception {

        // 차례대로 제거해서 출력하는 문제

        // 디큐를 써보자
        // K번째 사람은 pop하고, 1 ~ k-1은 다시 offer해준다.
        // 반복하고, K보다 수가 작아질 경우 순서대로 출력한다.

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        int N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());

        Deque<Integer> deque = new ArrayDeque<>();

        for (int i = 1; i <= N; i++) {
            deque.add(i);
        }

        while(true){
            if (deque.size() == 0){
                break;
            }else{
                for (int i = 1; i < K; i++) {
                    deque.offerLast(deque.pollFirst());
                }
                sb.append(deque.poll());
                sb.append(", ");
            }
        }

        sb.deleteCharAt(sb.length() -1);
        sb.deleteCharAt(sb.length() -1);

        System.out.println("<" + sb.toString() + ">");
    }
}

느낀점

이 문제는 디큐로 풀었다. 이유는.. 그냥 디큐가 더 빠르다고 그래서..
문제를 출력할 때에는 형식이 있었는데 모두 sb.append()에 추가해준 뒤
sb.deleteCharAt(sb.length() -1);을 두 번 해줘서 해결했다.
코테 볼 때 이 메서드들을 다 외울 수 있을까? 갈 길이 멀다

profile
꾸준함의 가치를 믿는 개발자

0개의 댓글