[프로그래머스 - Java] 프린터

민채·2021년 7월 2일
0

문제

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

설명

문제 조건

  1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼낸다.
  2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣는다.
    -> 이 부분을 통해 큐를 사용해야겠다고 생각했다.(선입선출)
  3. 그렇지 않으면 J를 인쇄한다.

처음에 그냥 큐를 이용해 중요도를 확인하면서 낮으면 빼서 뒤로 보내고 하다가 조금 복잡해졌다.
그러다 우선순위 큐가 떠올랐고 중요도를 기준으로 내림차순 정렬하고 priorities 배열과 비교하면서 문제를 해결했다.

소스코드

import java.util.Comparator;
import java.util.PriorityQueue;

public class Printer {

    public static void main(String[] args) {
        int[] p1 = {2, 1, 3, 2};
        int l1 = 2;
        System.out.println(solution(p1, l1));
		
        int[] p2 = {1, 1, 9, 1, 1, 1};
        int l2 = 0;
        System.out.println(solution(p2, l2));
    }
	
    public static int solution(int[] priorities, int location) {
        // 중요도를 기준으로 내림차순 정렬
        PriorityQueue<Integer> q = new PriorityQueue<>(Comparator.reverseOrder());
		
        for (int p : priorities) {
            q.add(p);
        }
		
        int answer = 0;
		
        while (!q.isEmpty()) {
            for (int i = 0; i < priorities.length; i++) {
                // 큐 맨 앞에 있는 중요도와 priorities[i]가 같은 경우 순서 증가시킴
                if (q.peek() == priorities[i]) {
                    answer++;
                    q.poll();
					
                    // 현재 위치와 요청한 문서의 위치가 같을 경우 바로 return
                    if (i == location) {
                        return answer;
                    }
                }
            }
        }
		
        return answer;
    }

}

GITHUB

https://github.com/MinchaeKwon/Programmers/blob/master/Level2/src/Printer.java

profile
코딩계의 떠오르는 태양☀️

0개의 댓글

관련 채용 정보