알고리즘 공부/문제 풀이
[프로그래머스] 스택/큐 - 프린터
valid_ming
2020. 8. 11. 15:13
이전 문제와 마찬가지로 인쇄 목록의 순서가 있기 때문에 큐를 떠올렸다.
큐를 이용하여 문제를 해결하였다.
class Waiting{
int priority; //우선순위와
int index; //location 변수와 비교 위해 index 추가
public Waiting(int p,int i) {
this.priority=p;
this.index=i;
}
}
static int solution(int[] priorities, int location) {
int answer = 0; //뽑힌 인쇄 수 == 뽑힌 인쇄 순서
Queue<Waiting> q=new LinkedList<Waiting>();
//대기 큐 초기화
for(int i=0;i<priorities.length;i++) q.offer(new Waiting(priorities[i],i));
//내림차순 배열
Arrays.sort(priorities);
int top=priorities.length-1; //가장 큰 값 가리킴
while(!q.isEmpty()) {
//큐의 맨앞 노드가 제일 큰 우선순위를 가질 때 --> 출력
if(top>-1 && q.peek().priority==priorities[top]) {
Waiting tmp=q.poll(); //대기 인쇄 목록에서 제거
answer++; top--; // 뽑힌 인쇄 수 ++
if(tmp.index==location) break; //출력한 그 인쇄목록이 location에 위치한 변수였을 때
}
// 뒤에 더 큰 우선순위가 존재할 때 --> 뒤로 보내기
else {
Waiting back=q.poll(); // 큐에서 제거 후
q.offer(back); // 뒤에 삽입
}
}
return answer;
}