CS/Algorithm
[BOJ][C++] 1966 프린터 큐
별토끼.
2019. 2. 1. 11:02
반응형
[BOJ][C++] 1966 프린터 큐
문제
https://www.acmicpc.net/problem/1966
풀이
입력받은 문서의 우선순위를 인덱스와 함께 큐에 넣어줍니다. (pair이용했어요)
그리고 또 하나의 배열을 생성해서 sort를 이용해 내림차순 정렬을 해줍니다.
그리고 while문을 사용해서 내림차순 정렬된 배열을 이용해 차례대로 큐의 우선순위값을 비교합니다. 이 때, 일치하면 큐에서 값을 빼고 index값과 M값을 비교합니다. 일치하면 while문을 빠져나오고 그렇지 않으면 또 다음 map의 값을 비교할 수 있도록 now변수의 값을 올려줍니다.
코드
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
int map[100] = { 0, };
bool desc(int a, int b) {
return a > b;
}
int main() {
int t;
scanf("%d", &t);
for (int i = 1; i <= t; i++) {
queue<pair<int,int>> paper;//index, priority
map[100] = { 0, };
int N, M;
scanf("%d %d", &N, &M);
for (int j = 0; j < N; j++) {
int p = 0;
scanf("%d", &p);
map[j] = p;
paper.push(make_pair(j,p));
}
sort(map, map + N, desc);
int now = 0;
int cnt = 0;
while (true) {
if (map[now] == paper.front().second) {
cnt++;
if (paper.front().first == M) {
printf("%d\n", cnt);
break;
}
int tmp1 = paper.front().first;
int tmp2 = paper.front().second;
paper.pop();
paper.push(make_pair(tmp1, tmp2));
now++;
}
else {
int tmp1 = paper.front().first;
int tmp2 = paper.front().second;
paper.pop();
paper.push(make_pair(tmp1, tmp2));
}
}
}
}
반응형