Programming/Programmers

[프로그래머스] 프린터 (c++) (스택/큐) (Level2)

fishersheep 2022. 3. 26. 17:01
반응형
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>

using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    int cnt=0;
    queue<pair<int,int>>q;
    vector<int>vec_num;
    int idx;
    
    for(int i=0;i<priorities.size();i++)    //문서의 중요도를 다른 vector에 저장
        vec_num.push_back(priorities[i]);
    
    
    sort(vec_num.begin(),vec_num.end());    //중요도를 오름차순으로 정렬
    
    
    for(int i=0;i<priorities.size();i++)
    {   
        int temp = priorities[i];
        q.push({i,temp});   //문서의처음위치, 문서의 중요도 push
    }
    
    idx = vec_num.size()-1; //오름차순 정렬된 vector에 마지막 인덱스, 가장 높은 중요도
    
    while(!q.empty())
    {   
        if(q.front().second ==vec_num[idx]) //queue의 front의 중요도와 현재 중요도와 일치할 경우
        {
            if(q.front().first==location)   //요청한 문서인지 확인
            {
                cnt++;  //순서증가후 종료
                break;
            }
            else
            {
                q.pop();    //아닌경우, queue에서 삭제
                idx--;  //다음중요도로 이동을 위해 idx감소
                cnt++;  //순서증가
            }
        }
        
        else if(q.front().second != vec_num[idx])   //현재 queue의 front와 중요도가 일치하지않은 경우
        {
            pair<int,int> x = q.front();    //삭제 후 다시 push를 통해서 현재 front값을 맨뒤로 이동
            q.pop();    
            q.push(x);
        }
        
    }
    answer = cnt;
    
    return answer;
}

 

후기

금방 풀긴했지만 처음에 틀렸을때 이유를 몰랐다. 다시 문제를 읽어보니 문제를 잘못이해했다.

내가 이해한 내용: 가장 중요도 높은 문서를 찾아서 높은문서를 시작으로 queue에서 위치 확인 -> 테스트케이스는 맞지만 정확도에서 많이틀린다.

실제 문제 내용: 가장 높은 문서를 찾아서 front로 확인한 후 다시 전체 문서중 다음으로 중요한 문서를 front로 가져와서 확인을 반복

반응형