소소한 개발이야기

[Programmers 문제풀이 JAVA] Level 2 프린터 본문

Programmers

[Programmers 문제풀이 JAVA] Level 2 프린터

plplim 2019. 5. 25. 16:38

📄 프린터

🔗 문제 풀러가기

Queue를 이용해 문제를 풀 수 있습니다. 문제는 다음과 같이 접근할 수 있습니다.

먼저 인쇄 대기목록의 index와 해당 인쇄물의 priority를 저장하는 PrintItem Class를 정의해줍니다.

 


🌱 PrintItem Class

class PrintItem {
    int index;
    int priority;

    public PrintItem(int index, int priority) {
        this.index = index;
        this.priority = priority;
    }
}

그리고 주어진 인쇄 대기목록을 모두 Queue에 넣습니다. 이 후 Queue의 가장 첫 번째 원소를 대기상태로 뺀 다음 Queue에 남은 인쇄 목록 중 대기상태의 priority값 보다 큰 원소들의 개수를 세어줍니다. 만약 그 개수가 0이라면 현재 대기상태인 목록은 출력 대상이 되며, 개수가 0보다 크다면 프린트 Queue의 가장 마지막으로 다시 들어가게 됩니다.

🌱 Solution 함수

public int solution(int[] priorities, int location) {
    Queue<PrintItem> printQueue = new LinkedList<>();
    for (int i = 0; i < priorities.length; i++) {
        printQueue.add(new PrintItem(i, priorities[i]));
    }

    return calcPrintTurn(printQueue, location);
}

🌱 프린트 순서를 계산하는 함수

private int calcPrintTurn(Queue<PrintItem> printQueue, int targetLocation) {
    int result = 0;

    while (true) {
        PrintItem temp = printQueue.poll();
        int cnt = (int) printQueue.stream().filter(item -> item.priority > temp.priority).count();

        if (cnt == 0) {
            result++;
        } else {
            printQueue.add(temp);
        }

        if (cnt == 0 && temp.index == targetLocation) {
            break;
        }
    }
    return result;
}
Comments