본문 바로가기

알고리즘/Programmers

Programmers / Stack, Queue / 프린터

< 문제링크 >

https://www.welcomekakao.com/learn/courses/30/lessons/42587

< 풀이 >

1. (위치, 중요도) 형태로 구성된 queue를 생성

2. queue의 첫번째 항목이 우선순위가 가장 높은 항목이면 큐에서 빼고 출력된 항목수를 1 증가 시킨다.

    2-1. 만약 출력된 항목이 우리가 찾고자 하는 항목이라면 답을 return 한다.

2-else. 우선순위가 가장 높은 항목이 아닌 경우 큐의 맨뒤로 이동시킨다.

< 코드 >

#include <string>
#include <vector>
#include <queue>
typedef struct NODE {
    int idx;
    int prior;
}node;
using namespace std;

// 현재 큐에서 우선순위가 가장 높은 항목인지 검사하는 함수
bool is_max(node cur, queue<node> que) {
    int size = que.size();
    int prior = cur.prior;
    for (int i = 0; i < size; i++) {
        if (que.front().prior > prior) return false;
        else que.pop();
    }
    ㅍreturn true;
}

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<node> que;
    // 큐에 (위치, 중요도) 형태로 추가
    for (int i = 0; i < priorities.size(); i++) {
        que.push({ i, priorities.at(i) });
    }
    while (true) {
        // 큐의 제일 처음 항목을 추출
        node cur = que.front();
        que.pop();
        // 우선순위가 가장 높은 항목이면 출력
        if (is_max(cur, que)) {
            answer++;
            // 현재 출력된 항목이 찾고자 하는 항목이면 답 return
            if (cur.idx == location) return answer;
        }
        // 우선순위가 가장 높지 않으면 큐의 맨뒤로 이동
        else que.push(cur);
    }
}