Baekjoon 1966 (프린터 큐)

Baekjoon 1966 (프린터 큐)

Baekjoon 1966, 백준 1966 문제의 본인 풀이입니다!
문제는 아래의 링크에서 확인할 수 있습니다.
문제보기

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
#include <iostream>
using namespace std;

int main() {
int test_case, N, M;
bool answer_printed = false;
cin >> test_case;

while(test_case--){
cin >> N >> M;
// initialization
int* arr = new int[1000000];
int start = 0, last = N;
int count = 1;
int max_imp = 0;
for(int i=0; i<N; i++) {
cin >> arr[i];
if(arr[i] > max_imp) max_imp = arr[i];
}
// ordering
while(last - start != 1){
// pop_and_push_it_back
if(arr[start] != max_imp) {
// moving M
if(start == M) M = last;
arr[last] = arr[start];
start++;
last++;
continue;
}

// pop max_importance
else if(arr[start] == max_imp) {
// answer choice
if(start == M) {
cout << count << '\n';
answer_printed = true;
break;
}
// not the answer choice
else {
count++;
start++;
// find the next max_imp
max_imp = 0;
for(int j = start; j < last; j++) if(arr[j] > max_imp) max_imp = arr[j];
continue;
}
}
}
// only one input
if(!answer_printed) cout << count << '\n';
answer_printed = false;
delete[] arr;
}
}

Queue를 응용하는 문제!
요런 유형의 문제는, 문제를 보고 “Queue를 사용해야겠다!”를 빨리 떠올리는 것이 관건인 것 같다
(비록 현재는 단원 명에 표시되어 있지만..)

Author

Yeonsang Shin

Posted on

2020-07-10

Updated on

2022-12-19

Licensed under

Comments