https://www.acmicpc.net/problem/1966
#include <iostream>
#include <utility>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int main() {
int t; cin >> t;
while (t--) {
queue<pair<int, int>> q;
int n, p, t;
cin >> n >> p;
vector<int> v(n);
for (int i = 0; i < n; i++) {
cin >> t;
v[i] = t;
q.push(make_pair(t, i)); // 입력값과 기존의 순서를 저장하기 위하여 pair<int, int>를 사용했습니다.
}
sort(v.begin(), v.end(), greater<>()); // 나머지 문서 중 중요도가 높은 것이 하나라도 남아 있는 지를 체크하기 위해서
int i = 0; // 몇 번 만에 찾았는 가를 알기 위해서, 중요도를 확인 하기 위해서 사용합니다.
while(!q.empty()) {
if (q.front().first == v[i]) { // 현재 Queue의 맨 앞에 있는 값이 가장 중요도가 높은 지를 확인합니다.
if (q.front().second == p) { // m번째 값이라면 몇 번 만에 찾았는지 출력합니다.
cout << i + 1 << "\n";
break;
}
else {
q.pop();
i++;
}
}
else { // 이 문서를 인쇄하지 않고 Queue의 맨 뒤에 넣습니다.
q.push(q.front());
q.pop();
}
}
}
return 0;
}
|
풀이:
pair과 queue를 사용하는 구현 문제 입니다.
위 두가지만 떠올린다면 풀 수 있습니다.
'백준(C, C++) > 실버' 카테고리의 다른 글
백준 1052: 물병 [C/C++] (0) | 2022.07.11 |
---|---|
백준 23253: 자료구조는 정말 최고야 (0) | 2022.07.09 |
백준 1158: 요세푸스 문제 [C언어] (0) | 2022.06.03 |
백준 1037 약수, c++ (0) | 2022.06.02 |
백준 11659 구간 합 구하기4 (0) | 2022.06.02 |