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; 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]; } while(last - start != 1){ if(arr[start] != max_imp) { if(start == M) M = last; arr[last] = arr[start]; start++; last++; continue; }
else if(arr[start] == max_imp) { if(start == M) { cout << count << '\n'; answer_printed = true; break; } else { count++; start++; max_imp = 0; for(int j = start; j < last; j++) if(arr[j] > max_imp) max_imp = arr[j]; continue; } } } if(!answer_printed) cout << count << '\n'; answer_printed = false; delete[] arr; } }
|
Queue를 응용하는 문제!
요런 유형의 문제는, 문제를 보고 “Queue를 사용해야겠다!”를 빨리 떠올리는 것이 관건인 것 같다
(비록 현재는 단원 명에 표시되어 있지만..)