처음엔 문제를 잘못 이해했었다;;
현재 처리하지 않고 남아 있는 프로세스들의 우선순위를 담을 우선순위 큐 하나만 있으면 해결가능했다.
1. 우선순위들을 모두 우선순위 큐에 넣는다.
2. 우선순위 큐가 비거나 찾으려는 프로세스가 처리되면 끝내도록 하고 while문을 돈다.
2-1. 인덱스를 하나씩 증가시키며 현재 프로세스의 우선순위가 우선순위 큐의 top과 같은지 비교한다.
2-2. 같다면 우선순위 큐에서 우선순위를 pop 하고, 정답에 1을 더해준다. (해당 인덱스가 찾고자 하는 프로세스의 인덱스라면 종료)
2-3. 같지 않다면 인덱스를 증가시킨다.(인덱스가 priorities 벡터의 크기보다 커지는 것을 막기 위해 벡터의 크기로 모듈러 연산해 준다.)
입력으로 들어오는 priorities 배열의 크기가 최대 100이기 때문에 이렇게 해도 시간 초과는 나지 않을 것이다.
코드
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
priority_queue<int> jobQueue;
for (int i = 0; i < priorities.size(); i++) {
jobQueue.push(priorities[i]);
}
int index = 0;
while (!jobQueue.empty()) {
if (priorities[index] == jobQueue.top()) {
answer++;
jobQueue.pop();
if (index == location) {
break;
}
}
index++;
index %= priorities.size();
}
return answer;
}
'PS > Programmers' 카테고리의 다른 글
[PG] 단속카메라 [C++] (0) | 2024.03.22 |
---|---|
[PG] 구명보트 [C++] (0) | 2024.03.21 |
[PG] H-Index [C++] (0) | 2024.03.20 |
[PG] 네트워크 [C++] (0) | 2024.03.20 |
[PG] 베스트앨범 [C++] (1) | 2024.03.12 |