[알고리즘/자바] 프로그래머스 - 프린터

2020. 7. 20. 08:07개발/알고리즘

 

https://programmers.co.kr/learn/courses/30/lessons/42587

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린��

programmers.co.kr

 

내가 원하는 출력물이 몇번만에 출력되는지 계산하는 문제다. 그냥 꺼내면 좋겠지만 각 출력물은 우선순위가 부여되어있다. 

 

먼저 prior에 우선순위 정보를 넣고, loc에 위치 정보를 넣었다. 

 

prior의 0번째 출력물을 하나 꺼내고 prior에 남아 있는 값들 중에 내가 꺼낸 출력물 보다 우선순위가 높은게 없다면 출력하면 된다. 만약 있다면 제일 후 순위로 다시 넣는다. 

 

loc는 출력물의 최초 위치를 기억하기 위해 사용했다. 

 

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
       
        int answer = 0;
        List<Integer> prior = new ArrayList<Integer>();
        List<Integer> loc = new ArrayList<Integer>();
        
        
        // 위치정보 할당.
        for(int i =0; i<priorities.length; i++) {
            prior.add(priorities[i]);
            loc.add(i);
        }
        
        int count = 0;
        while(true) {
            
            
            int l = loc.get(0);
            int p = prior.get(0);
            loc.remove(0);
            prior.remove(0);
            
            if(prior.size()==0) {
                answer += count +1;
                break;
            }
            
            // 꺼낸값보다 우선순위가 높은게 있다면 다시 큐안으로..
            if( Collections.max(prior) > p ) {
                prior.add(p);
                loc.add(l);
            }
            // 꺼낸값보다 우선순위가 높은게 큐에 없다면 출력
            else {
                
                count += 1;
                
                if( location == l) {
                    answer = count;
                    break;
                }
            }
        }

        return answer;
        
    }
}