https://school.programmers.co.kr/learn/courses/30/lessons/42587
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
큐(Queue)를 이용하여 프로세스의 우선순위에 따라 실행 순서를 결정하는 문제입니다. 실행 대기 큐에 있는 프로세스들은 중요도에 따라 정렬되지 않은 상태로 대기하고 있으며, 운영체제는 다음과 같은 규칙에 따라 프로세스를 실행합니다.
- 큐의 맨 앞에 있는 프로세스를 꺼냅니다.
- 큐에 남아 있는 프로세스 중 현재 프로세스보다 높은 우선순위를 가진 프로세스가 있다면, 꺼낸 프로세스를 다시 큐의 맨 뒤로 보냅니다.
- 그렇지 않으면, 해당 프로세스를 실행하고 종료합니다.
- 실행된 프로세스는 더 이상 큐에 들어가지 않습니다.
풀이 방법
이 문제는 queue 자료구조를 활용하여 해결할 수 있습니다.
우선, 각 프로세스의 인덱스를 큐에 저장하여 프로세스 순서를 관리합니다. 동시에 priorities 벡터를 활용하여 각 프로세스의 중요도를 확인합니다. 큐에서 프로세스를 하나씩 꺼낸 뒤, 꺼낸 프로세스의 중요도가 현재 대기 중인 프로세스들 중 가장 높은지 확인합니다.
- 우선순위가 더 높은 프로세스가 있는 경우:
- 현재 프로세스를 다시 큐의 뒤로 보내고, priorities의 중요도를 업데이트합니다. 이를 통해 현재 프로세스가 실행되지 않고 대기 상태로 돌아가도록 처리합니다.
- 우선순위가 가장 높은 경우:
- 해당 프로세스를 실행하고 answer 값을 증가시킵니다.
- 만약 현재 프로세스의 인덱스가 location과 같다면, answer 값을 반환합니다.
풀이 코드
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
queue<int>q;
bool check_higher;
int solution(vector<int> priorities, int location) {
int answer = 0;
for(int i=0; i<priorities.size(); i++) q.push(i);
while(!q.empty()){
int current_num = q.front();
int propority = priorities[0];
q.pop();
check_higher = false;
for(int i : priorities){
if(propority<i) {
check_higher = true;
break;
}
}
if(check_higher) {
q.push(current_num);
priorities.push_back(propority);
priorities.erase(priorities.begin());
}
else {
answer++;
if(current_num == location) return answer;
priorities.erase(priorities.begin());
}
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.2 의상 c++ (0) | 2025.01.19 |
---|---|
[프로그래머스] Lv.2 가장 큰 수 c++ (0) | 2025.01.19 |
[프로그래머스] Lv.1 숫자 문자열과 영단어 c++ (0) | 2025.01.17 |
[프로그래머스] Lv.1 키패드 누르기 c++ (0) | 2025.01.17 |
[프로그래머스] Lv.1 신규 아이디 추천 c++ (0) | 2025.01.17 |