반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42587
문제
코드 및 풀이
프로세스
실행 대기 큐에서 대기중인 프로세스를 하나 꺼냄
우선순위가 더 높은 프로세스를 꺼내고 방금 꺼낸것을 다시 집어 넣음
큐라는걸 사용하면 아주 간단할 수 있다고 생각합니다.
큐를 이용해 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;
}
반응형
'알고리즘 > c++ 프로그래머스' 카테고리의 다른 글
[프로그래머스 할인행사] c++ (코드 및 풀이) (1) | 2023.05.15 |
---|---|
[프로그래머스 뉴스 클러스터링, 2018 카카오] c++ (풀이 및 코드) (0) | 2023.05.15 |
[프로그래머스 기능개발] c++ (코드, 풀이) (0) | 2023.05.14 |
[프로그래머스, 카카오 코테] 튜플 c++ (풀이과정,코드) (0) | 2023.05.13 |
[프로그래머스] 의상 c++ (코드,풀이방법) (2) | 2023.05.13 |
댓글