[백준] 프린터 큐 1966번 - Java

GOSHK·2022년 2월 7일
0

[백준] Java

목록 보기
16/49
post-thumbnail

[백준] 프린터 큐 1966번

나의 풀이

public class PrinterQueue {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int K = Integer.parseInt(br.readLine());
        Deque<Integer> priority;
        Deque<Integer> index;

        for(int i = 0; i < K; i++) {
            String[] first = br.readLine().split(" ");
            int N = Integer.parseInt(first[0]);
            int M = Integer.parseInt(first[1]);
            int rank = 1;
            priority = new LinkedList<>();
            List<Integer> tempPriority = new ArrayList<>();
            String[] priorities = br.readLine().split(" ");
            for(int k = 0; k < N; k++) {
                priority.add(Integer.parseInt(priorities[k]));
                tempPriority.add(Integer.parseInt(priorities[k]));
            }

            Collections.sort(tempPriority, Collections.reverseOrder());

            if(N == 1) {
                sb.append(1).append("\n");
                continue;
            }

            index = new LinkedList<>();
            for(int j = 0; j < N; j++) {
                index.add(j);
            }

            while(true) {
                if(priority.peek() != tempPriority.get(0)) {
                    priority.add(priority.poll());
                    index.add(index.poll());
                } else {
                    if(index.getFirst() != M) {
                        rank++;
                        priority.pop();
                        index.pop();
                        tempPriority.remove(0);
                    } else {
                        sb.append(rank).append("\n");
                        break;
                    }
                }
            }
        }

        System.out.println(sb.toString());
    }
}

느낀점

파이썬으로 푼 것과 동일한 개념을 적용하여 풀었는데, 파이썬처럼 유연하지 않기 때문에 되게 복잡해졌다.

0개의 댓글