-
[프로그래머스] 프린터ALGORITHM/PROGRAMMERS 2021. 7. 28. 18:37
https://programmers.co.kr/learn/courses/30/lessons/42587?language=java
2021-07-28
12345678910111213141516171819202122import java.util.Collections;import java.util.PriorityQueue;class Solution {public int solution(int[] priorities, int location) {int answer = 0;PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());for(int p: priorities) pq.offer(p);loop:while(!pq.isEmpty()) {for(int i = 0; i < priorities.length; i++) {if(pq.peek() == priorities[i]) {pq.poll();answer++;if(i == location) break loop;}}}return answer;}}cs #문제풀이
예제 2번을 기준으로 본다.
priorities [1, 1, 9, 1, 1, 1]
location 0
주어진 priorities 배열은 다음과 같다.
(line 7) 위 배열을 값이 큰 순서대로 (priority) queue에 넣어놓으면 아래와 같을 것 이다. priority queue에서 인덱스 값은 따로 관리하지 않고 값 자체만 관리를 하였다.
그래서 우리는 priority queue 안에 값이 있을 때까지 while문을 돌릴건데, 이 때 pq의 값과 함께 체크 해야할 것이 인덱스를 알 수 있는 priority 배열이다.
(line 13) 현재 pq의 값, 즉 제일 먼저 프린트 되어야 할 문서의 인덱스를 priorities 배열로 알 수 있다.
만약, 현재 pq에서 peek()을 했을 때 나오는 값이 priorities의 값과 같다면 해당 인덱스가 지금 프린트해야할 값과 같다는 의미이므로, pq에서 poll()을 해주면 된다.
좀 더 자세하게 보자면, pq.peek()값이 9일 때 priorities 배열을 앞에서부터 찾아간다. priorities 배열인덱스 0~1은 내가 찾고자 하는 값이 아니므로, 주어진 조건처럼 가장 뒤로 프린트 순서가 미뤄진다.
그래서 priorities 배열 인덱스 2 에서 내가 원하는 값을 찾으면 pq에서 poll()을 해버린다. 그리고, priorities 배열이 끝날 때까지 계속 탐색을 하면 다음과 같다.
(line 15) 그리고, pq.peek()값이 내가 찾고자 하는 priorities와 일치한다면 계속 프린트 문서가 늘어나는 것을 answer++ 해줘야한다.
(line 16) 목적은 location 위치의 문서가 몇 번째로 프린트 됐는지가 궁금한 것이므로, 인덱스 값이 location이랑 같을 때 answer값을 리턴해주면된다. lcoation 0의 문서는 4개의 문서가 프린트 된 후 다섯 번째에 프린트가 되는 것을 확인할 수 있다.
'ALGORITHM > PROGRAMMERS' 카테고리의 다른 글
[프로그래머스] 배달 (0) 2021.07.29 [프로그래머스] 주식가격 (0) 2021.07.28 [프로그래머스] 소수 찾기 (완전탐색) (0) 2021.07.28 [프로그래머스] 짝지어 제거하기 (2017 팁스타운) (0) 2021.07.28 [프로그래머스] 이진 변환 반복하기 (0) 2021.07.27