[프로그래머스] 프린터

urzi·2022년 3월 30일
0

PS

목록 보기
10/36

문제

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

풀이

우선순위 큐를 이용해서 풀었다.
일단 priorities 배열을 우선순위 큐에 넣었다.
그러면 큐에서 하나씩 꺼낼때마다 가장 큰 값이 나온다.
다음에 큐가 비어있을 때까지 while문을 돌린다.
while문 안에서 priorities 배열을 loop한다.
큐의 제일 위에값과 priorities의 값을 하나씩 비교해서 같으면 큐에서 값을 하나 빼면서 answer를 1씩 증가시켜 준다.
이때 priorities의 인덱스 값과 location의 값이 일치한다면 answer를 return 시켜준다.

[예제]
2 1 3 2에서 2번 인덱스(3)는 몇번째로 인쇄되는가?

[풀이]

  1. 큐의 제일 위에값은 3이다. 가장 큰 값이기 때문이다.
  2. priorities를 loop하면서 3과 같은 값을 찾는다. (큐에서 값을 빼는게 아니라 가장 위에 값만 확인)
  3. 찾았으면 해당 인덱스 값이 location과 같은지 확인해서 맞으면 answer를 return한다.
  4. 만약 다르면 answer를 1씩 증가시켜주고 큐의 제일 위에값을 빼준다.
  5. 위에 작업을 반복하면서 인덱스 값과 location 값이 같을때까지 한다. 큐의 제일 위에 값은 3 다음으로 큰 값이 된다.

코드

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
    	// 몇번째인지 return 하는 것이므로 1부터 시작(0번째는 없으므로)
        int answer = 1;
        
        // 우선순위 큐 생성
        PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());

		// 큐에 담아준다.
        for (int x : priorities) {
            queue.offer(x);
        }

		// 큐가 비어있지 않을 때까지 loop한다.
        while (!queue.isEmpty()) {
        	// priorities loop
            for (int i = 0; i < priorities.length; i++) {
            	// 큐의 제일 위에값과 priorities[i] 값이 같은지 비교
                if (!queue.isEmpty() && priorities[i] == queue.peek()) {
                	// 만약 i와 location도 같으면 answer return
                    if (i == location) {
                        return answer;
                    }
                    // 위에서 return 이 안된다면 answer를 증가시켜주고 큐에서 값을 하나 뺀다. (제일 큰 값이 빠지게 된다.)
                    answer++;
                    queue.poll();
                }
            }
        }

        return answer;
    }
}
profile
Back-end Developer

0개의 댓글