하루에 한 문제
[프로그래머스] 프린터 -Java 본문
https://programmers.co.kr/learn/courses/30/lessons/42587
import java.util.Collections;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
Queue <Integer> priority = new LinkedList<>(); //중요도
PriorityQueue <Integer> sortPriority = new PriorityQueue<Integer>(Collections.reverseOrder());
Queue <Integer> index = new LinkedList<>(); //인덱스
for(int i=0; i<priorities.length; i++) {
index.offer(i);
priority.offer(priorities[i]);
sortPriority.offer(priorities[i]);
}
int cnt=0;
while(!priority.isEmpty()) {
int pri=priority.poll(); //프린터 하나 뽑기
int idx=index.poll();
if(pri==sortPriority.peek()) { //현재 뽑는게 가장 높은 우선순위를 가진다면
cnt++;
sortPriority.poll();
if(idx==location) { //찾으면
answer=cnt;
break;
}
}
else { //우선순위 더 높은게 있다면 다시 넣어주기
priority.offer(pri);
index.offer(idx);
}
}
return answer;
}
}
소요시간 : 15분
큐를 3개 사용했습니다.
1. 중요도를 저장할 큐
2. 중요도가 높은 순으로 저장되어 있는 우선순위 큐
3. 인덱스를 저장할 큐
로직을 살펴보면
1. 중요도, index를 저장하고 있는 큐에서 각각 하나씩 poll합니다.
2. 중요도 우선순위큐에서 peek을 합니다.
2-1. 만약 중요도와 우선순위큐에서 뽑은 중요도가 같다면 우선순위큐를 poll합니다.
그리고 프린터한 숫자를 1개 늘려줍니다.
만약 인덱스가 location과 같다면 answer에 cnt를 넣어주고 while문을 종료합니다.
2-2. 우선순위큐의 중요도가 더 높다면
중요도, index를 다시 각각의 큐에 offer해줍니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 구명보트 -Java (0) | 2021.02.25 |
---|---|
[프로그래머스 2017 카카오코드 예선] 카카오프렌즈 컬러링북 -Java (0) | 2021.02.24 |
[프로그래머스] 주식가격 -Java (0) | 2021.02.15 |
[프로그래머스 2021 KAKAO BLIND RECRUITMENT] 순위 검색 -Java (0) | 2021.01.25 |
[프로그래머스 2021 KAKAO BLIND RECRUITMENT] 합승 택시 요금 -Java (0) | 2021.01.25 |
Comments