Algorithm/Programmers

[Programmers] 프린터

goakgoak 2020. 5. 29. 15:19

[Level 2] 프린터

https://programmers.co.kr/learn/courses/30/lessons/42587

  • 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.
  • 1. 인쇄 대기 목록의 가장 앞에 있는 문서(J)를 대기 목록에서 꺼냅니다.
  • 2. 나머지 인쇄 대기 목록에서 J 보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기 목록의 가장 마지막에 넣습니다.
  • 3. 그렇지 않으면 J를 인쇄합니다.

 

 

Solution

  • LinkedList를 사용해 맨 앞에서 부터 하나씩 꺼내 나머지 문서중에 value가 높은 문서가 있는지 확인한다.
  • (1) 있으면 리스트의 마지막에 넣고 (2) 없을 경우에는 요청한 문서인지 확인한다. 

 

 

소스코드

 

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
import java.util.*;
 
class Solution {
    static LinkedList<Doc> list;
    static int count, answer;
    
    static class Doc{
        private int idx;
        private int value;
        
        public Doc(int idx, int value){
            this.idx = idx;
            this.value = value;
        }
    }
    public int solution(int[] p, int l) {
        init();
        for(int i = 0; i<p.length; i++){
            list.add(new Doc(i, p[i]));
        }
        
     loop: while(!list.isEmpty()){
            Doc cur = list.removeFirst();
            boolean flag = false;
            for(int i = 0; i<list.size(); i++){  
               if(cur.value < list.get(i).value){
                   flag  =  true;
                   break;
               }
            }
             // (1)
if(flag){
                    list.addLast(cur);
                 continue;
               }
// (2)
else {
                 count++;
                 if(!flag && cur.idx == l){
                    answer = cur.idx;
                   break loop;
                 }
                 }
                
        }
        answer = count;
        return answer;
    }
    
    public static void init(){
        list = new LinkedList<>();
        count = 0;
    }
}
  cs