기계는 거짓말하지 않는다

[Programmers] 프린터 본문

Programming Test

[Programmers] 프린터

KillinTime 2021. 6. 24. 22:30

프로그래머스 - 프린터 문제입니다.

 

문제
입출력 예

우선순위가 가장 높은 목록 부터 차례대로 꺼내야 하고 location이 자신이 요청한 문서의 위치이므로

priorities 배열에서 가장 높은 순서대로 출력해야 합니다.

priorities 를 정렬하면 index 위치가 섞이기 때문에 처음 index와 우선순위를 알고 있어야 합니다.

 

가장 초기의 인덱스와 우선순위를 함께 큐에 저장하고 우선순위 배열을 정렬합니다.

큐에서 가장 앞 데이터의 우선순위가 처음 출력되어야 하는 우선순위 보다 낮다면 큐의 가장 뒤로 보냅니다.

현재 출력되어야 하는 우선순위와 큐의 가장 앞에 있는 우선순위가 같다면 출력하고 answer를 1 더합니다.

이때 location의 인덱스와 같다면 정답이 됩니다.

#include <string>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

bool cmp(int a, int b) {	// 내림차순 정렬
    return a > b;
}

class Data {
    public:
    int index;
    int priority;
    
    Data() {}
    Data(int index, int priority) {
        this->index = index;
        this->priority = priority;
    }
};

int solution(vector<int> priorities, int location) {
    int answer = 0;
    int i;
    queue<Data> q;
    Data d;
    
    for(i = 0; i < priorities.size(); i++) {	// 초기 인덱스와 우선순위 함께 저장
        q.push(Data(i, priorities[i]));
    }
    
    sort(priorities.begin(), priorities.end(), cmp);	// 우선순위 배열 정렬
    
    while(!q.empty()) {
        if(priorities[answer] > q.front().priority) {	// 큐의 가장 앞 데이터의 우선순위가 현재 출력되어야 하는 우선순위보다 작다면
            d = q.front();
            q.pop();
            q.push(d);
        }
        else if(priorities[answer] == q.front().priority) {		// 큐의 가장 앞 데이터의 우선순위가 현재 출력되어야 하는 우선순위와 같다면
            answer++;	// 출력 후 다음 우선순위로 넘어감
            if(q.front().index == location) break;	// 내가 요청한 인쇄물과 위치가 같다면 정답
            q.pop();
        }
    }
    return answer;
}

'Programming Test' 카테고리의 다른 글

[Programmers] 우박수열 정적분 (Python)  (0) 2023.03.31
[Programmers] 다음 큰 숫자 (C++)  (0) 2022.10.09
[Programmers] n진수 게임  (0) 2021.05.27
[Programmers] 더 맵게  (0) 2021.05.18
[Programmers] 올바른 괄호  (0) 2021.05.03
Comments