공부공간

BOJ - 1966 ) 프린터 큐 본문

알고리즘/구현,시뮬

BOJ - 1966 ) 프린터 큐

개발자가될수있을까? 2020. 1. 27. 20:43


https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를

www.acmicpc.net


프린터에서 가중치를 부여하여 큐에 현재 가중치보다 높은 문서가 있는 경우 

 

현재의 문서를 큐에 맨뒤로 보내는 작업을 반복하면서

 

내가 궁금한 번호의 문서가 몇번째로 출력되는지 구현하는 문제이다.

 

Deque를 사용해서 구현하려 했었는데, 그것보다 ArrayList로 삽입,삭제 구현이 더 쉬울것 같아서

 

그냥 index와 가중치값을 클래스로 선언하여서 

 

클래스를 담는 ArrayList를 선언하였다.

 

 

 

 


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
import java.util.Scanner;
 
class pos{
    int index;
    int prior;
    pos(int index , int prior){
        this.index = index;
        this.prior = prior;
    }
}
 
public class Main {
    public static void main(String[] args) throws Exception{
        
        Scanner sc = new Scanner(System.in);
        int tc= sc.nextInt();
        while(tc > 0) {
            int size = sc.nextInt();
            int want = sc.nextInt();
            int step = 0;
            ArrayList<pos> arr = new ArrayList<pos>();
            
            for(int index = 0 ; index < size ; index++) {
                int p = sc.nextInt();
                arr.add(new pos(index ,p));
            }
            boolean com = false;
            pos now = arr.get(0);
            if(arr.size() == 1) {
                step=1;
                tc--;
                System.out.println(step);
            }
            else {
                while(true) {
                    
                    for(int index = 1; index < arr.size() ; index++) {
                        int nowp = arr.get(index).prior;
                        if(nowp > now.prior) {
                            pos temp = arr.get(0);
                            arr.remove(0);
                            arr.add(temp);
                            com = true;
                            break;
                        }
                            
                    }
                    if(!com) {
                        step++;
                        if(arr.get(0).index == want) break;
                        arr.remove(0);
                        
                    }
                    
                    now = arr.get(0);
                    com = false;
                }
                System.out.println(step);
                tc--;
            }
        }
        
    }
 
}
 
 

'알고리즘 > 구현,시뮬' 카테고리의 다른 글

SWEA ) 대관이의 대량할인  (0) 2020.02.09
SWEA ) 줄기세포 배양  (2) 2020.02.09
BOJ - 14890 ) 경사로  (0) 2020.02.07
Jungol - 1141 ) 불쾌한 날(Bad Hair Day)  (0) 2020.02.03
BOJ - 2798 ) 블랙잭  (0) 2020.01.28
Comments