[프로그래머스] 프린터(자바)

지수·2021년 10월 21일
0
post-thumbnail

알고리즘 문제 풀이를 블로그에 올리는 이유는 풀이, 코드를 기록하기 위함이니
앞으로 문제를 다 긁어오기보다 링크만 두고 풀이가 잘 보이도록 포스팅 할 예정입니다!

📄 문제

[프로그래머스] 프린터


👩‍💻 풀이

1. 문제 이해

이 문제는

  • 프린터에 예약이 걸린 문서들을 돌면서
  • 뒤에 우선순위가 더 높은(값이 더 큰) 문서가 있는지 확인
    - 뒤에 우선순위가 더 높은 문서가 있으면, 앞의 문서를 뒤로 보내고
    - 뒤에 우선순위가 더 높은 문서가 없으면, 해당 문서를 출력하는 로직에 따라
  • 우선순위가 표시된 프린터 예약 리스트와 특정 위치가 주어졌을 때,
    해당 위치의 문서가 몇 번째로 출력되는지 반환하는 문제이다.

2. 풀이

  • 큰 수부터 정렬하는 우선순위 큐를 통해 대기 중인 프린트 목록을 우선순위대로 정렬
  • 해당 큐가 빌 때까지
    기존의 프린트 예약 목록을 반복문으로 돌아
    해당 값이 우선순위 큐의 맨 앞 값과 같은지 확인 = 바로 출력할 수 있는지 확인
  • 같다면(=출력) 그 때의 i가 주어진 location 값과 같은지 확인
    - location 값과 같다면,
    출력순서를 의미하는 answer를 1 추가하고 그 때까지 쌓인 answer를 반환
    - location 값과 다르다면,
    우선순위 큐의 맨 앞 값은 poll하고(출력하고), answer도 1 추가
  • 같지 않다면 (=출력없이 뒤로 돌아가는 것) 다음 숫자로 넘어감
public class Solution {

    public static void main(String[] args) {
        int[] priorities = {1, 1, 9, 1, 1, 1};
        int location = 0;

        System.out.println(solution(priorities, location));
    }

    public static int solution(int[] priorities, int location) {
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());  //우선순위를 큰 숫자로 변경
        int answer = 0;

        for (int i = 0; i < priorities.length; i++) {
            pq.add(priorities[i]);
        }

        while (!pq.isEmpty()) {
            for (int i = 0; i < priorities.length; i++) {
                if (priorities[i] == pq.peek()) {
                    if (i == location) {
                        answer++;
                        return answer;
                    }
                    pq.poll();
                    answer++;
                }
            }
        }
        return -1;
    }
profile
사부작 사부작

0개의 댓글