[프로그래머스] 프린터 문제 풀이(스택/큐 Lv.2) - C++

2021. 12. 6. 05:00네카라쿠배 취준반 - 프로그래머스 문제 풀이

0. 자세한 설명은 YouTube 영상으로

1-1. 구조체 + Queue를 활용한 Solution

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

using namespace std;

struct PrintJob{
    int priority;
    int location;
};

int solution(vector<int> priorities, int location)
{
    queue<PrintJob> printer;                         //queue에 index 삽입.
    for(int i=0; i<priorities.size(); i++){
        PrintJob job;
        job.location = i;
        job.priority = priorities[i];
        printer.push(job);
    }

    int turn = 0;
    while (!printer.empty())    {
        // 2. 0번을 꺼내서 max priority가 이나면 다시 끝에 넣기
        PrintJob job = printer.front();
        printer.pop();

        if (job.priority != *max_element(priorities.begin(), priorities.end()))        {
            printer.push(job);
        } else {
            turn++;
            // 3. max Priority가 맞다면 내가 찾는 job이 맞는지 확인하기
            if (job.location == location)
                break;
            priorities[job.location] = 0;
        }
    }

    return turn;
}

int main(void)
{
    vector<int> priorities = {2, 1, 3, 2};
    cout << solution(priorities, 2);
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1-2. Queue만 활용한 Solution

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

using namespace std;

int solution(vector<int> priorities, int location)
{
    queue<int> printer;                         //queue에 index 삽입.
    for(int i = 0; i< priorities.size(); i++)
        printer.push(i);

    int turn = 0;
    while (!printer.empty())    {
        // 2. 0번을 꺼내서 max priority가 이나면 다시 끝에 넣기
        int idx = printer.front();
        printer.pop();

        if (priorities[idx] < *max_element(priorities.begin(), priorities.end()))        {
            printer.push(idx);
        } else {
            turn++;
            // 3. max Priority가 맞다면 내가 찾는 job이 맞는지 확인하기
            if (location == 0)
                break;
            priorities[idx] = 0;
        }

        location--;
        if (location < 0)
            location = printer.size() - 1;
    }

    return turn;
}

int main(void)
{
    vector<int> priorities = {2, 1, 3, 2};
    cout << solution(priorities, 1);
    return 0;
}
  • YouTube 영상에 자세한 내용을 정리했으니 참고하세요.
반응형