문제 설명
운영체제가 우선순위 큐로 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 return
https://school.programmers.co.kr/learn/courses/30/lessons/42587
문제 풀이법
문제 설명에도 나와있듯이 queue를 통해서 문제를 풀었다
우선순위대로 실행이 되고 특정 프로세스의 위치를 알아야 하는 것이 핵심이었다
우선 queue에 vector에 있는 값들을 순서대로 넣어준다
그리고 우선순위를 알기 위해 vector의 값들을 내림차순 정렬을 해준다
특정 프로세스의 위치를 업데이트 하기 위한 loc 변수도 설정해준다
이제 queue가 비어있지 않을동안 계속 반복하는 while 문 안에 다음과 같은 로직을 작성해준다
우선 내림차순된 vector의 맨 앞의 수와 queue의 front가 같은지 확인한다
같다면 우선순위가 가장 큰 것이 실행된다는 뜻이므로 queue를 pop해주고 answer을 + 1 해준다
만일 이때 loc == 0이라면, 내가 찾는 특정 프로세스가 실행된다는 뜻이므로 바로 answer을 return 해준다
아니라면, 내림차순된 vector을 가리키는 인덱스 i를 + 1 해주고, loc도 - 1 해준다
내림차순된 vector의 맨 앞의 수와 queue의 front가 같지않다면, queue의 front 값을 push 해준뒤, pop 해준다
ex) 2-3-1-2 -> 3-1-2-2
이때 loc도 - 1 해주는데, 만일 loc < 0이라면, 특정 프로세스가 맨 뒤로 같다는 뜻이므로 queue.size() - 1 로 초기화해준다
소스 코드
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
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(), cmp);
int i = 0;
int loc = location;
while(!q.empty()) {
if (priorities[i] == q.front()) {
q.pop();
answer++;
if (loc == 0)
return answer;
i++;
loc--;
}
else {
q.push(q.front());
q.pop();
loc--;
if (loc < 0)
loc = q.size() - 1;
}
}
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 2단계 - 행렬의 곱셈 (0) | 2024.02.02 |
---|---|
[프로그래머스] 3단계 - 정수 삼각형 (0) | 2024.02.01 |
[프로그래머스] 2단계 - 할인 행사 (0) | 2024.01.30 |
[프로그래머스] 2단계 - n^2 배열 자르기 (0) | 2024.01.30 |
[프로그래머스] 2단계 - 괄호 회전하기 (0) | 2024.01.22 |