본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 프로세스] c++ (풀이, 코드)

by 말린밴댕이_공부 2023. 5. 14.
반응형

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제

코드 및 풀이

프로세스

실행 대기 큐에서 대기중인 프로세스를 하나 꺼냄
우선순위가 더 높은 프로세스를 꺼내고 방금 꺼낸것을 다시 집어 넣음

큐라는걸 사용하면 아주 간단할 수 있다고 생각합니다.

큐를 이용해 pair를 통해 우선순위, 위치(인덱스) 를 넣게 된다면 편하게 진행한다고 생각합니다.

 

또한 저는 arr[10]을 활용해서 숫자의 갯수를 arr[priorities[i]]++을 통해 숫자를 산정했습니다.

 

그렇게 함으로써 반복문을 돌고 있을때 max_num이 0이라는 것은 이제 최고의 우선순위가 필요가 없어졌다는 뜻으로 의미를 해석해 while반복문을 돌면서 --를 진행하였습니다.

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

using namespace std;

int solution(vector<int> priorities, int location) {
    int answer = 0;
   
    int arr[10]; // 숫자의 갯수
    queue<pair<int,int>> q; //우선순위와 location을 queue로
    int max_num = 9; // 원소는 1이상 9이하 정수 9가 최댓값
   
    memset(arr,0,sizeof(arr));
   
    for(int i =0;i<priorities.size();i++){
        q.push(make_pair(priorities[i],i));
        arr[priorities[i]]++;
    }
   
    while(!q.empty()){
        int num = q.front().first;
        int index = q.front().second;
       
        while(arr[max_num] == 0){
            max_num--; //비어있는 숫자에 대해서 내리면서 처리
        }
        if(num >= max_num){
            arr[max_num]--;
            q.pop();
            answer++;
            if(index == location)
                return answer;
        }else{
            q.pop();
            q.push(make_pair(num,index));
        }
    }
   
    return answer;
}

 

반응형

댓글