[Programmers/JAVA] 프린터

2023. 2. 20. 19:59자바/프로그래머스

 

내 코드

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int index=priorities.length-1;
        
        //queue에 priorities넣기
        Queue<Integer> pri_queue=new LinkedList<>();
        for(int p : priorities) {
            pri_queue.add(p);
        }

        //priorities값을 정렬
        Arrays.sort(priorities);

        //priorities의 최대값보다 숫자가 작으면 뒤로 보내기
        while(location>=0) {
            if(pri_queue.peek()<priorities[index]) {
                pri_queue.add(pri_queue.peek());
                pri_queue.remove();
                if(location==0) {
                    location+=pri_queue.size()-1;
                }else{
                    location--;
                }
            }else {
                pri_queue.remove();
                answer++;
                location--;
                index--;
            }
        }
        
        return answer;
    }
}

 

느낀점

확실히 알고리즘 문제도 많이 풀다보면 실력이 느나..!?

풀이가 전보다 더 빠르게 나오는 듯하다.

큐를 사용해서 맨 앞 종이의 우선순위가 낮으면 remove해서 맨 뒤로 보내줬다. 와중에 location도 확인해야하기 때문에 매번 location--; 를 해줬고, location이 0이 되면 (=> 맨뒤로 넘어가면) location에 pri_queue.size()-1; 값을 줆으로써 위치값을 부여했다. 그러다 location이 remove되게 되면 location값이 음수가 되면서 while문은 끝난다!