알고리즘/BaekJoon

백준 1996 : 프린터 큐

꾸준하게 :) 2020. 2. 19. 21:16

문제 링크입니다 https://www.acmicpc.net/problem/1966

 

1966번: 프린터 큐

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

www.acmicpc.net

 

 

[소스코드]

 

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
// [Brute Force] 백준(1966) : 프린터 큐
 
#include<cstdio>
#include<queue>
using namespace std;
 
int tc, n, m, important[110];
 
// n개의 문서를 하나씩 큐에서 빼보면서 중요도를 비교해 몇 번째로
// 인쇄해야하는지 반환해주는 함수
int getResult(void) {
 
    bool check[110= { 0, };
    queue <int> q;
    for (int i = 0; i < n; i++) q.push(i); // n개의 문서를 큐에 넣고
 
    int cnt = 0;
    while (1) {
        int max_ = 0, idx = 0;
        
        // 아직 인쇄되지 않았고 가장 중요도가 높은 문서를 찾는다
        for (int i = 0; i < n; i++) {
            if (!check[i] && max_ < important[i]) {
                max_ = important[i];
                idx = i;
            }
        }
 
        while (1) {
            int cur = q.front();
 
            // 현재 내가 큐에서 뽑은 문서가 지금 인쇄해야 하는 문서이거나
            // 인쇄해야 하는 문서와 중요도가 같다면 인쇄하고 break
            if (cur == idx || important[cur] == important[idx]) {
                cnt++;
                q.pop();
                check[idx] = true;
                if (cur == m) {
                    return cnt;
                }
                break;
            }
            else {
                // 그렇지 않으면 큐에서 빼고 맨 뒤로 push
                q.pop();
                q.push(cur);
            }
        }
    }
}
 
int main(void) {
    scanf("%d"&tc);
    for (int t = 1; t <= tc; t++) {
        scanf("%d%d"&n, &m);
        for (int i = 0; i < n; i++) {
            scanf("%d"&important[i]);
        }
        printf("%d\n", getResult());
    }
    return 0;
}
cs

 

'알고리즘 > BaekJoon' 카테고리의 다른 글

백준 11403 : 경로 찾기  (0) 2020.02.19
백준 1260 : DFS와 BFS  (0) 2020.02.19
백준 14500 : 테트로미노  (0) 2020.02.18
백준 14889 : 스타트와 링크  (0) 2020.02.18
백준 16234 : 인구 이동  (0) 2020.02.18