본문 바로가기
Coding Test/Programmers

[프로그래머스] 프린터 [JAVA(자바)]

‘프로그래머스 코딩테스트 고득점 Kit’ 문제 입니다. 😀

문제 👉 <코딩테스트 연습 - 프린터 | 프로그래머스>

1. 문제

  1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다.
  2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다.
  3. 내가 요청한 문서는 몇번째로 인쇄되는지 return 한다.

2. 풀이

Queue 를 이용한 문제 풀이

  • 입력 순서대로 반환하면 되기 때문에 대기목록을 Queue 로 나타낸다.
  • 남아 있는 인쇄 작업의 중요도를 배열 arr 로 저장한다.
  1. 대기목록(Queue)에서 하나의 작업을 poll()하고, location-- 을 한다. 그리고 남아 있는 인쇄 작업 중 자신보다 중요도가 높은 것이 있는지 확인한다.
    1. 자신보다 중요도가 높은 것이 있을 경우 다시 대기목록(Queue)에 add()한다. 만약 location==-1일 경우 location=que.size()-1로 초기화한다.
    2. 자신보다 중요도가 높은 것이 없을 경우 배열에서 해당 중요도의 개수를 하나 빼고(arr[num]--), answer++을 하고, location==-1일 경우 종료한다.

3. 코드

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        int[] arr = new int[10];
        Queue<Integer> que = new LinkedList<>();

        for (int priority : priorities) {
            arr[priority]++;
            que.add(priority);
        }

        while (!que.isEmpty()) {
            int num = que.poll();
            boolean flag = true;
            location--;
            for (int i=num+1; i<10; i++) {
                if (arr[i] > 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                arr[num]--;
                answer++;
                if (location == -1)
                    break;
            } else {
                que.add(num);
                if (location == -1)
                    location = que.size() - 1;
            }
        }
        return answer;
    }
}


References


🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋

댓글