프로그래머스>코딩테스트 연습>고득점 Kit>스택/큐 : 프린터 - https://programmers.co.kr/learn/courses/30/lessons/42587
문제 그대로 이해해서 코드로 적용하면 되는 문제.
1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
3. 그렇지 않으면 J를 인쇄합니다.
input으로 들어오는 priorities를 locations과 묶어 Task
로 정의했다. 이 Task는 순서대로 Queue에 넣는다.
Queue에서 가장 앞에 위치한 Task를 뽑아낸 뒤, 큐에 남아있는 Task를 확인해 방금 뽑은 Task보다 더 높은 우선순위를 가진 작업이 존재하는지
확인한다.
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
class Task{
int location;
int priority;
public Task(int location, int priority) {
this.location = location;
this.priority = priority;
}
}
public int solution(int[] priorities, int location) {
int answer = 0;
Queue<Task> queue = new LinkedList<>();
for(int i=0; i<priorities.length; i++){
queue.add(new Task(i, priorities[i]));
}
int now=0;
while(!queue.isEmpty()){
Task cur = queue.poll();
boolean flag = false;
for(Task t : queue){
if(t.priority>cur.priority){
flag = true;
}
}
if(flag) { // 우선순위 높은게 있으면 뒤로 보낸다
queue.add(cur);
}else{
now++;
if(cur.location == location) {
answer = now;
break;
}
}
}
return answer;
}
}
✔ 알고리즘 분류 - 스택/큐
✔ 난이도 - Level 2
for(Task t : queue){
...
}
딱히 없음