[Programmers] 프린트

bin1225·2023년 1월 26일
0

Algorithm

목록 보기
14/43

Level 2

  • 문제

Queue 자료구조를 이용하는 문제였다.

  • 풀이
    처음에 중요도 순위대로 sort 하여 내림차순으로 중요도 순위를 정렬한다.
    queue에 주어진 priorities를 옮겨 담고 하나씩 꺼내서 존재하는 목록중 가장 중요한 문서인지 정렬된 벡터의 첫번째 값과 비교하여 판별한다.

    중요한 문서 + location과 일치 -> 종료 (tmp반환)
    중요한 문서 -> 비교하는 인덱스 업데이트 (tmp)
    후순위 문서 -> q뒤에 다시 push
    후순위 문서 + location과 일치 -> location을 업데이트

    좀 때려맞히기로 풀어서 코드가 난잡하다.
    다른 사람 풀이를 보니 인덱스 자체를 queue에 담고, max_element라는 기능을 이용해서 priorities에 존재하는 최댓값을 찾아 이용하였다. 그리고 출력하는 경우는 priorities의 해당 인덱스에 위치한 값을 0으로 업데이트 해줬다.
    if(priorities[now_index] != *max_element(priorities.begin(),priorities.end()))

  • 코드

#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
    queue<int> q;
    
    for(int i=0; i<priorities.size(); i++){
        q.push(priorities[i]);
    }
    
    sort(priorities.begin(), priorities.end());
    reverse(priorities.begin(), priorities.end());
    int tmp = 0;
    int l = 0;
    while(true){
        int a = q.front();
        q.pop();
        if(a==priorities[tmp]){
            tmp++;
            if(l==location) return tmp;
        }else{
            q.push(a);
            if(l==location) location+=q.size();
        }
        l++;
        
        
    }
    return answer;
}

0개의 댓글