[프로그래머스/C++]Lv.2 - 프로세스

YH J·2023년 9월 22일
0

프로그래머스

목록 보기
153/168

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/42587

내 풀이

queue에 index를 채워넣는다.
priorities의 원소중 max값을 구한다.
while을 돌리면서 큐의 맨 앞값과 max를 비교한다.
max보다 작으면 맨 앞의 원소를 맨 뒤로 보낸다.
max와 같다면 그 index가 location과 같은지 체크하고 아니면
priorities[index]의 값을 0으로 바꾸고 다시 max를 갱신한다.
count++하고 큐에서 pop한다.

내 코드

#include <string>
#include <vector>
#include <algorithm>
#include <queue>
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(i);
    
    int max = *max_element(priorities.begin(), priorities.end());
    int count = 1;
    while(1)
    {
        int num = q.front();
        
        if(priorities[num] < max)
        {
            q.push(num);
            q.pop();
        }
        else
        {
            if(num == location)
                return count;
            priorities[num] = 0;
            max = *max_element(priorities.begin(), priorities.end());
            count++;
            q.pop();
        }
    }
    
    return answer;
}

다른 사람의 풀이

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

using namespace std;

int solution(vector<int> priorities, int location) {
    queue<int> printer;                         //queue에 index 삽입.
    vector<int> sorted;                         //정렬된 결과 저장용
    for(int i=0; i<priorities.size(); i++) {
        printer.push(i);
    }
    while(!printer.empty()) {
        int now_index = printer.front();
        printer.pop();
        if(priorities[now_index] != *max_element(priorities.begin(),priorities.end())) {
            //아닌경우 push
            printer.push(now_index);
        } else {
            //맞는경우
            sorted.push_back(now_index);
            priorities[now_index] = 0;
        }
    }
    for(int i=0; i<sorted.size(); i++) {
        if(sorted[i] == location) return i+1;
    }
}

다른 사람의 풀이 해석

실행 된 프로세스들을 따로 vector에 모은다.
vector에서 location과 같은 원소를 찾아서 그 인덱스를 +1 하여 리턴한다.

profile
게임 개발자 지망생

0개의 댓글