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 |