[프로그래머스] 프린터
2020. 3. 27. 14:48ㆍ프로그래머스/LEVEL 2
import java.util.*;
class Solution {
public int solution(int[] priorities, int location) {
int answer = 0;
PriorityQueue<Integer> temp = new PriorityQueue<>(Collections.reverseOrder());
for(int i=0; i<priorities.length; i++){
temp.offer(priorities[i]);
}
while(!temp.isEmpty()){
for(int i=0; i<priorities.length; i++){
if(temp.peek()==priorities[i]){
temp.poll();
answer ++;
if(i==location){
temp.clear();
break;
}
}
}
}
return answer;
}
}
PriorityQueue의 메소드
1. offer,add : 값을 넣어준다.
2. peek : 우선순위가 가장 높은 것을 반환해준다. Collections.reverseOrder()를 통해 값이 큰 것이 높은 우선순위를 갖는다.
3. poll : 우선순위가 높은것을 제거한다.
4. isEmpth : 큐가 비었는지 확인해준다.
import java.util.*;
class Solution {
class document {
int turn;
int priority;
document(int turn, int priority) {
this.turn = turn;
this.priority = priority;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
List<document> documents = new ArrayList<>();
for(int i=0; i<priorities.length; i++){
documents.add(new document(i,priorities[i]));
}
while(true){
if(isCorrectPriority(documents)){
answer ++;
if(documents.get(0).turn == location){
break;
}
documents.remove(0);
} else {
documents.add(new document(documents.get(0).turn,documents.get(0).priority));
documents.remove(0);
}
}
return answer;
}
private boolean isCorrectPriority(List<document> documents){
for(int i=1; i<documents.size(); i++){
if(documents.get(0).priority<documents.get(i).priority){
return false;
}
}
return true;
}
}
두번째 풀때는, 순서와 우선순위가 함께 담긴 class를 만들어서 풀었다.
우선순위큐가 떠오르지 않아서였다.
우선순위 큐의 활용법을 제대로 알아야겠다.
'프로그래머스 > LEVEL 2' 카테고리의 다른 글
[프로그래머스] 더 맵게 (0) | 2020.03.28 |
---|---|
[프로그래머스] H-Index (0) | 2020.03.28 |
[프로그래머스] 피보나치 수 (0) | 2020.03.27 |
[프로그래머스] 가장 큰 수 만들기 (0) | 2020.03.25 |
[프로그래머스] 기능개발 (0) | 2020.03.25 |