728x90
https://www.acmicpc.net/problem/1966
문제 풀이
이번 문제는 idx와 중요도를 pair로 만들어서 큐에 저장하고,
중요도를 순서대로 정렬한 다른 컨테이너를 만들어서 비교하는게 중요하다.
중요도를 비교해서 맞으면 출력회수(cnt)를 늘리고 만약 m과 idx가 같다면 출력회수를 출력하고 종료한다.
느낀 점
문제를 해결하고 보니 많은 분들이 우선순위 큐를 이용하셨고 나보다 코드가 더 깔끔했다. 하지만 나는 우선순위 큐에 대해서 몰랐기 때문에 벡터로 구현했다. q.front()와 같은 직접적인 내장 함수로 접근하면 런타임 에러가 발생할 수 있다는 점을 알게되었다! 다음부터 구현할 때 따로 변수를 만들어줘서 다뤄야겠다.
코드
#include <iostream>
#include <utility>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int t, n, m, input;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> t;
while (t--) {
queue<pair<int, int>> q;
vector<int> v;
int cnt = 0;
cin >> n >> m;
for (int i = 0; i < n;i++) {
cin >> input;
q.push({ i, input });
v.push_back(input);
}
sort(v.begin(), v.end());
while (!q.empty()) {
int idx = q.front().first;
int priority = q.front().second;
q.pop();
if (v.back() == priority) {
cnt++;
v.pop_back();
if (idx == m) {
cout << cnt << "\n";
break;
}
}
else {
q.push(make_pair(idx, priority));
}
}
}
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C++] 백준 1021번 : 회전하는 큐 (0) | 2021.07.25 |
---|---|
[C++] 백준 10866번 : 덱 (0) | 2021.07.24 |
[C++] 백준 11866번 : 요세푸스 문제 0 (0) | 2021.07.24 |
[C++] 백준 2164번 : 카드2 (0) | 2021.07.24 |
[C++] 백준 18258번 : 큐 2 (0) | 2021.07.23 |
댓글