개발 공부 기록
728x90

https://programmers.co.kr/learn/courses/30/lessons/42587#qna

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린

programmers.co.kr

스택/큐 문제 중의 큐 문제. 처음엔 priorities 배열을 큐에 넣고, 숫자 배열을 정렬하여 큐의 첫번째 있는 원소가 배열의 맨 앞에 있는 것과 비교할 생각이었다. 두 개(큐 첫번째 원소, 정렬한 배열의 첫번째 원소, 즉 가장 큰 숫자)가 같으면 큐에서 출력을 하고, 배열의 원소를 바꿔주는 식으로 이어 나가려 했으나, int 배열의 내림차순 정렬하기 보단 PQ를 쓰는 것이 더 좋을 것 같아서 바꿔 풀었고, 금방 해결했다!

 

내가 인쇄를 요청한 것이 몇번째에 있는지 알기 위해 Print라는 클래스를 만들어서 정의해주었다.

import java.util.*;

class Print {
    int pri;
    boolean chk;

    public Print(int pri, boolean chk) {
        this.pri = pri;
        this.chk = chk;
    }
}

public class 프린터 {
    public int solution(int[] priorities, int location) {

        Queue<Print> q = new LinkedList<>();
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());

        for(int i = 0; i < priorities.length; i ++) {
            boolean chk = false;
            if(i == location) chk = true;
            q.add(new Print(priorities[i], chk));
            pq.add(priorities[i]);
        }

        int cnt = 0;
        while (!q.isEmpty()) {
            Print cur = q.poll();

            if(cur.pri == pq.peek()) {
                cnt ++;
                if(cur.chk) break;
                pq.poll();
            } else q.add(cur);
        }

        return cnt;
    }
}
728x90
profile

개발 공부 기록

@찐만두

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!