이번에는 프로그래머스에서 스택/큐 카테고리에 있는 프린터 문제를 풀어봤는데요
아직 알고리즘도 그렇고 문법도 뭔가 어려움이 많아 고민도 많이하고 시간도 많이 걸린거 같아요
먼저 문제를 보면

잘 안보이시다면
https://programmers.co.kr/learn/courses/30/lessons/42587
코딩테스트 연습 - 프린터
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린
programmers.co.kr
여기를 참고해주세요~
문제풀이
import java.util.*;
public class Solution {
public int solution(int[] priorities, int location) {
// PriorityQueue를 사용해서 숫자가 높을수록 우선순위를 가지게 저장
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reverseOrder());
int answer = 0;
for (int pri : priorities) {
pq.offer(pri);
}
// 내가 인쇄요청한 문서 찾을때까지 반복
while (pq.size() != 0) {
for (int i = 0; i < priorities.length; i++) {
// 내가 요청한 문서와 해당 문서의 인덱스를 알기위해 비교
if (pq.peek() == priorities[i]) {
pq.poll();
answer++;
// 내가 요청한 문서일때
if (location == i) {
pq.clear();
break;
}
}
}
}
return answer;
}
}
PriorityQueue
- 들어온 숫자의 순서와 상관없이 우선순위가 높은 데이터를 먼저 출력한다.
- 숫자가 낮을수록 우선순위를 높게 가져 낮은 숫자가 먼저 출력된다. (오름차순)
- 내부요소가 힙구조로 이루어져있어 이진트리 구조를 가진다.
그래서 이번 문제에서는 높은 숫자가 우선순위를 가지게 되므로
.reverseOrder( )를 사용해서 오름차순에서 내림차순으로 정렬을 바꿔주었다.
그 이외에 사용한 메소드
.offer( ) : PriorityQueue에 값을 추가해준다.
.peek( ) : PriorityQueue의 첫번째 값(가장 앞에있는 값)을 가져온다.
.poll( ) : PriorityQueue의 가장 앞에 값을 반환하고 제거한다. (이 때 비어있다면 null을 반환한다.)
.clear( ) : 큐 초기화
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 프로그래머스 12926 시저암호 - java (0) | 2021.07.17 |
---|---|
[Programmers] 프로그래머스 12912 두 정수 사이의 합 - java (2) | 2021.07.09 |
[Programmers] 프로그래머스 1845 폰켓몬 - java (1) | 2021.07.01 |
[Programmers] 프로그래머스 42626 더 맵게 - java (0) | 2021.06.17 |