Algorithm/Programmers

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

ikjo 2022. 5. 17. 15:30

문제 설명

 

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

 

접근 방법

우선 주어지는 문서들의 중요도가 중복될 수 있으므로 각각의 문서별 ID를 만들어 이를 Map으로 관리하도록 했습니다.

 

        Map<Integer, Integer> documentsById = new HashMap<>();
        
        for (int i = 0; i < priorities.length; i++) {
            documentsById.put(i, priorities[i]);
        }

 

이후 문서별 ID들을 Queue에 순서대로 넣은 후 각 문서별 ID를 나머지 문서별 ID들과 비교하여 자기 자신 보다 중요도가 더 높은 문서가 없다면 이를(문서 ID) List에 추가시키도록 했습니다.

 

        Queue<Integer> documentQueue = new LinkedList<>(documentsById.keySet());
        List<Integer> print = new ArrayList<>();

        boolean flag = true;

        while (!documentQueue.isEmpty()) {
            int documentId = documentQueue.poll();
            int document = documentsById.get(documentId);
            for (int i : documentQueue) {
                if (document < documentsById.get(i)) {
                    documentQueue.add(documentId);
                    flag = false;
                    break;
                }
            }
            if (flag) {
                print.add(documentId);
            }
            flag = true;
        }

 

최종적으로 List 자료구조(print)에서 찾고자 하는 문서 위치 정보(location)을 통해서 몇 번째로 인쇄되는지를 반환합니다.

 

    return print.indexOf(location) + 1;

 

 

전체 소스 코드

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;

class Solution {

    public int solution(int[] priorities, int location) {
        Map<Integer, Integer> documentsById = new HashMap<>();

        for (int i = 0; i < priorities.length; i++) {
            documentsById.put(i, priorities[i]);
        }

        Queue<Integer> documentQueue = new LinkedList<>(documentsById.keySet());
        List<Integer> print = new ArrayList<>();

        boolean flag = true;

        while (!documentQueue.isEmpty()) {
            int documentId = documentQueue.poll();
            int document = documentsById.get(documentId);
            for (int i : documentQueue) {
                if (document < documentsById.get(i)) {
                    documentQueue.add(documentId);
                    flag = false;
                    break;
                }
            }
            if (flag) {
                print.add(documentId);
            }
            flag = true;
        }

        return print.indexOf(location) + 1;
    }
}

 

 

참고자료