티스토리 뷰
문제 링크
문제 조건
- 중요도가 높은 문서를 먼저 인쇄하는 프린터를 만들어보자.
- 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼낸다.
- 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣는다.
- 그렇지 않으면 J를 인쇄한다.
- 현재 대기목록에는 1 ~ 100개의 문서가 있다.
- 인쇄 작업의 중요도는 1 ~ 9로 표현하며 숫자가 클수록 중요하다.
- location은 0 이상 (현재 대기목록에 있는 작업 수 - 1) 이하의 값을 가지며 대기목록의 가장 앞에 있으면 0, 두 번째에 있으면 1로 표현한다.
변수 설명
priorities : 현재 대기목록에 있는 문서의 중요도가 순서대로 담긴 배열 (매개변수)
location 내가 인쇄를 요청한 문서가 현재 대기목록의 어떤 위치에 있는지를 알려주는 변수 (매개변수)
Print : idx(index)와 prior(우선순위)를 갖는 Class
q : Print를 가지는 큐
aq : 정답 순서를 가지는 큐
pq : 우선순위를 기준으로 내림차순 우선순위 큐
코드 설명
- priorities를 index와 값을 가지는 class, Print를 q에 넣어준다.
- priorities를 pq에 넣어준다.
- pq와 q의 prior값을 조사한다.
- 맞으면 q.peek() 값을 aq에 넣어준다.
- 다르면 q.peek() 값을 다시 q에 넣어준다.
배운 점
- PriorityQueue
pq = new PriorityQueue<>(ln, Collections.reverseOrder()); - Collections.reverseOrder를 사용하여 내림차순으로 바꿀 수 있다.
문제 해답
import java.util.Collections;
import java.util.LinkedList;
import java.util.PriorityQueue;
import java.util.Queue;
class Print implements Comparable<Print> {
int idx;
int prior;
Print(int idx, int prior){
this.idx = idx;
this.prior = prior;
}
@Override
public int compareTo(Print o) {
if(this.prior > o.prior)
return 1;
else
return -1;
}
}
class Solution {
public int solution(int[] priorities, int location) {
int ln = priorities.length;
int answer = 0;
Queue<Print> q = new LinkedList<>();
Queue<Print> aq = new LinkedList<>();
PriorityQueue<Integer> pq = new PriorityQueue<>(ln, Collections.reverseOrder());
for(int i=0;i<ln;i++) {
Print data = new Print(i, priorities[i]);
q.add(data);
pq.add(priorities[i]);
}
/* q.forEach(a -> {
System.out.println(a.idx);
});
pq.forEach(a -> {
System.out.println(a);
});
*/
while(!pq.isEmpty()){
if(q.peek().prior ==pq.peek()) {
pq.remove();
Print buffer = q.poll();
aq.add(buffer);
}
else {
Print buffer = q.poll();
q.add(buffer);
}
}
/* aq.forEach(a -> {
System.out.println(a.idx);
});*/
for(int i=1;i<=ln;i++){
if(aq.poll().idx == location){
answer = i;
break;
}
}
return answer;
}
}
'알고리즘 > Programmers' 카테고리의 다른 글
[Programmers] 고득점 Kit - Stack/Queue : 주식가격 #42584 (0) | 2020.01.17 |
---|---|
[Programmers] 고득점 Kit - Stack/Queue : 쇠막대기 #42585 (0) | 2020.01.16 |
[Programmers] 고득점 Kit - Stack/Queue : 기능개발 #42586 (0) | 2020.01.12 |
[Programmers] 고득점 Kit - Stack/Queue : 탑 #42588 (0) | 2020.01.12 |
[Programmers] 고득점 Kit - Sort : H-Index #42747 (0) | 2019.12.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Olympiad
- programmers
- 디자인 패턴
- node.js
- 프로그래머스
- 클린 아키텍처
- BAEKJOON
- C++
- 테라폼
- 디자인패턴
- BOJ
- 알고리즘
- 정규표현식
- Spring
- 객체지향
- Algorithm
- 클린 코드
- 이펙티브 자바
- MSA
- Kotlin
- 백준
- 코테
- Spring Boot
- AWS
- kkoon9
- Java
- Effective Java
- kotest
- 이팩티브 자바
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함