알고리즘 풀이/프로그래머스

프로그래머스 - 프린터 (스택/큐)

배게 2019. 12. 3. 12:38
728x90

엄청 어려운 문제는 아닌데


완료 DocumentList를 선언안하고 하나의 List로 전부 처리하려고 하다가


시간 날려먹음 가능은 할텐데 index 처리를 제대로 못해주니까 자꾸 실패하길래


그냥 List 한개 더만듬




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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
    public int solution(int[] priorities, int location) {
        int answer = 0;
 
        LinkedList<Document> waitList = new LinkedList<>();
        LinkedList<Document> compList = new LinkedList<>();
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
 
        for (int i = 0; i < priorities.length; i++) {
            // System.out.print(priorities[i]+" ");
            pq.add(priorities[i]);
 
            waitList.add(new Document(i, priorities[i]));
 
        }
        // System.out.println();
        // System.out.println(pq.size()+" "+waitList.size());
        // System.out.println(pq.peek());
        // System.out.println(waitList.get(0).priority);
 
        int index = 0;
 
        while (true) {
            if (waitList.size() == 0)
                break;
            int max = pq.peek();
            if (max == waitList.get(0).priority) {
                pq.poll();
                compList.add(waitList.remove(0));
            } else {
                waitList.add(waitList.remove(0));
            }
        }
        //         while(waitList.size()>0){
        //             int max = pq.peek();
        //             if(max==waitList.get(index).priority){
        //                 System.out.println(pq.poll());
        //                 index++;
        //                 System.out.println("사이즈는.."+ pq.size()+" "+waitList.size());
        //             }
        //             else{
        //                 Document doc0 = waitList.remove(0);
        //                 compList.add(doc0);
        //             }
 
        //         }
 
        // while(!pq.isEmpty()){
        //     System.out.print(pq.poll()+" ");
        // }
 
        // System.out.println();
        // for(int i=0; i<waitList.size(); i++){
        //     System.out.println(waitList.get(i).priority+" "+waitList.get(i).index);
        // }
 
        for (int i = 0; i < compList.size(); i++) {
            // System.out.println(compList.get(i).priority+" "+compList.get(i).index);
            if (compList.get(i).index == location) {
                return i + 1;
            }
        }
 
        return answer;
    }
 
    class Document {
        int index;
        int priority;
 
        // index is location.
        Document(int index, int priority) {
            this.index = index;
            this.priority = priority;
        }
    }
cs