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));
            }
            
        }

        
    }
}

 

반응형