계단을 오르듯이

[JAVA] 프로그래머스 - 프린터 본문

알고리즘/프로그래머스

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

happyAyun 2022. 1. 29. 21:54

문제를 이해하면 이렇다.

대기 목록에서 하나의 문서를 순서대로 빼어, 그 문서가 최고의 우선순위이면 그대로 프린트를 한다.

그 프린트의 위치가 일치하면 바로 끝.

그렇지 않으면 프린트하는 순서를 알아내기 위해 순서를 나타내는 변수를 올려준다.

만약 최고의 우선순위가 아닐 시 바로 뒤로 줄을 서야하고 그 외에는 변화할게 없다.

 

for-each의 for문을 이용하여 큐에 존재하는 모든 원소와 우선순위를 비교할 수 있었다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.util.*;
 
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        Queue<Node> q = new LinkedList<>();
        for(int i=0;i<priorities.length;i++){
            q.offer(new Node(i,priorities[i]));
        }
        int num = 0// 순서 - 결과값
        while(!q.isEmpty()){
            Node now = q.poll();
            boolean flag = false;
            for(Node n : q){
               if(n.priority > now.priority){ // 높은 우선순위가 있다면
                   flag = true;
                   break;
               }
            }
            if(flag){ // 뒤로
                q.offer(now);
            }else{
                num++// 이번 순서
                if(now.idx == location){
                    answer = num;
                    break;
                }
            }
        }
        return answer;
    }
    static class Node{
        int idx, priority;
 
        public Node(int idx, int priority){
            super();
            this.idx = idx;
            this.priority = priority;
        }
    }
}
cs