알고리즘 공부/문제 풀이

[프로그래머스] 스택/큐 - 프린터

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;
	}