티스토리 뷰
반응형
문제 링크: www.acmicpc.net/problem/1966
큐와 우선순위 큐를 활용해 해결하는 문제다.
입력받을 때 큐에 {문서의 순서, 중요도}를 pair를 활용해 저장했고, 우선순위큐에 중요도를 넣어주었다.
이후 큐에 있는 모든 문서가 처리될 때까지 while문으로 반복한다.
맨 앞에 있는 문서를 꺼낸 다음(q.pop()
) 해당 문서의 중요도가 남아있는 모든 문서 중 가장 높은 중요도와 일치하면(현재 문서의 중요도가 가장 높다는 뜻) 몇번째 출력인지 나타내는 count변수에 1 더해주고, 우선순위 큐에서 pop해준다. 만약 그렇지 않으면 다시 큐에 넣는다.
우선순위 큐에서 pop할 때(이번에 출력하려던 문서의 중요도가 남아있는 문서 중요도 중 가장 높았을 때), 이번에 출력한 문서가 몇 번째로 인쇄되었는지 궁금한 문서(m)라면 몇 번째로 인쇄되었는지 출력해주고 이번 테스트케이스를 끝낸다.
#include <cstdio>
#include <queue>
using namespace std;
int main() {
int caseNum = 0;
scanf("%d", &caseNum);
for (int i = 0 ; i < caseNum ; i++) {
int n, m, in, count=0;
queue <pair<int, int>> q;
priority_queue<int> pq;
scanf("%d %d", &n, &m);
for (int j = 0; j < n ; j++){
scanf("%d", &in);
pq.push(in);
q.push({ in, j });
}
while (!q.empty()) {
int imp = q.front().first;
int index = q.front().second;
q.pop();
if (pq.top() == imp) {
pq.pop();
count++;
if (index == m) {
printf("%d\n", count);
break;
}
}
else {
q.push({ imp,index });
}
}
}
}
꽤 이전에 푼 문제인데 지금이라면 몇 번째 문서인지와 해당 문서 중요도를 저장하는 큐를 만들지 않고 우선순위 큐에 pair로 저장할 것 같다. (우선순위 큐에 따로 지정을 하지 않으면 pair중 first가 기준이되므로)
반응형
'알고리즘 > Baekjoon' 카테고리의 다른 글
백준 4949: 균형잡힌 세상 (C++) (0) | 2020.11.21 |
---|---|
백준 2164: 카드2 (C++) (0) | 2020.11.21 |
백준 10828: 스택 (C++) (0) | 2020.11.21 |
백준(Baekjoon, BOJ) 온라인 저지에서 "컴파일 에러"가 뜨는 경우 (2) | 2020.11.19 |
백준 10828: 스택 (C) (0) | 2020.11.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MySQL
- 리액트
- 프로그래머스
- 컴퓨터과학
- 우선순위큐
- 카카오추천팀
- 컴퓨터공학
- 동적계획법
- 큐
- sql
- 개발
- 회고
- 자료구조
- 코드포매터
- 후위표기식
- React
- JS
- 알고리즘
- reactjs
- 코테후기
- dfs
- 다이나믹프로그래밍
- 자바스크립트
- c++
- 스택
- plotly
- dash-plotly
- 백준
- 머신러닝
- Dash
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
반응형