일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- DFS와BFS
- DART
- Vue
- 개발
- django
- 안드로이드스튜디오
- DFS
- Algorithm
- android
- cos pro
- BAEKJOON
- 분할정복
- 안드로이드
- Python
- 알고리즘
- 코드품앗이
- AndroidStudio
- cos
- C++
- codingtest
- 백준
- 동적계획법과최단거리역추적
- 코딩테스트
- vuejs
- 파이썬
- 코테
- cos pro 1급
- issue
- Flutter
- 동적계획법
- Today
- Total
Development Artist
[Baekjoon, C++] 1966번 : 프린터 큐 본문
백준 단계별 풀기에서 큐,덱 네 번째 문제이다.
링크는 아래와 같다.
1. priority queue를 사용한다. 일반 queue와 다른 점은 숫자를 push 할 때 자동으로 정렬을 해준다는 점이다. 1 2 3 4 순서대로 넣는다면, 4 3 2 1로 위치하게 된다. priority_queue.top()을 해보면 4가 먼저 나오는 것을 확인할 수 있다.
2. queue에 값을 넣을 때 pair를 사용한다. 일반적으로 pair를 사용하려면 utility 라이브러리를 전처리에서 포함시켜줘야하는데, queue 라이브러리에서는 utility 없이 사용할 수 있다. pair를 사용하는 이유는, queue에 push 할 때, 수열의 index값 뿐만 아니라, 해당 index의 우선순위값도 저장하기 위함이다.
3. 따라서, 2개의 queue를 사용한다. queue<pair> 와 priority queue. 큐에서 값을 꺼내서 priority queue의 top과 비교한다. queue에서 꺼낸 값의 우선순위와 우선순위큐의 top값이 같다면 현재 가장 우선순위가 높은 값이고, 먼저 나오게 되는 값이다. 우리가 알고자하는 문서는 아니지만, 문제의 조건에서 차례대로 나오는 숫자라는 것은 분명하다. 우리는 이 값을 카운팅을 해줘야한다. answer++로 나올때마다 1씩 올려준다. 그리고 조건을 하나 더 봐야한다. queue에서 꺼낸 값의 우선순위와 우선순위큐의 top값이 같다면, 해당 값의 Index값이 우리가 찾고자하는 문서의 index 값인지를 비교해야한다. 해당 조건이 만족된다면, 우리가 찾고자 문서이고 몇번째로 나오는지를 출력해야하니 카운팅하고 있던 answer값을 출력해준다.
#include<iostream>
#include<queue>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int numOfTest;
cin >> numOfTest;
for (int i = 1; i <= numOfTest; i++) {
int numOfSeq;
int idxOfDocument;
int answer = 0;
queue<pair<int, int>> que;
priority_queue<int> pq;
cin >> numOfSeq;
cin >> idxOfDocument;
for (int j = 0; j < numOfSeq; j++) {
int pri;
cin >> pri;
que.push({j,pri});
pq.push(pri);
}
while (!que.empty()) {
int nowIdx = que.front().first;
int nowPri = que.front().second;
que.pop();
if (pq.top() == nowPri) {
answer++;
pq.pop();
if (idxOfDocument == nowIdx) {
cout << answer << "\n";
break;
}
}
else {
que.push({ nowIdx, nowPri });
}
}
}
return 0;
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[Baekjoon, C++] 1021번 : 회전하는 큐 (0) | 2021.01.17 |
---|---|
[Baekjoon, C++] 10866번 : 덱 (0) | 2021.01.16 |
[Baekjoon, C++] 11866번 : 요세푸스 문제 0 (0) | 2021.01.14 |
[Baekjoon, C++] 2164번 : 카드2 (0) | 2021.01.13 |
[Beakjoon, C++] 18258번 : 큐2 (0) | 2021.01.12 |