< 문제링크 >
https://www.welcomekakao.com/learn/courses/30/lessons/42587
< 풀이 >
1. (위치, 중요도) 형태로 구성된 queue를 생성
2. queue의 첫번째 항목이 우선순위가 가장 높은 항목이면 큐에서 빼고 출력된 항목수를 1 증가 시킨다.
2-1. 만약 출력된 항목이 우리가 찾고자 하는 항목이라면 답을 return 한다.
2-else. 우선순위가 가장 높은 항목이 아닌 경우 큐의 맨뒤로 이동시킨다.
< 코드 >
#include <string>
#include <vector>
#include <queue>
typedef struct NODE {
int idx;
int prior;
}node;
using namespace std;
// 현재 큐에서 우선순위가 가장 높은 항목인지 검사하는 함수
bool is_max(node cur, queue<node> que) {
int size = que.size();
int prior = cur.prior;
for (int i = 0; i < size; i++) {
if (que.front().prior > prior) return false;
else que.pop();
}
ㅍreturn true;
}
int solution(vector<int> priorities, int location) {
int answer = 0;
queue<node> que;
// 큐에 (위치, 중요도) 형태로 추가
for (int i = 0; i < priorities.size(); i++) {
que.push({ i, priorities.at(i) });
}
while (true) {
// 큐의 제일 처음 항목을 추출
node cur = que.front();
que.pop();
// 우선순위가 가장 높은 항목이면 출력
if (is_max(cur, que)) {
answer++;
// 현재 출력된 항목이 찾고자 하는 항목이면 답 return
if (cur.idx == location) return answer;
}
// 우선순위가 가장 높지 않으면 큐의 맨뒤로 이동
else que.push(cur);
}
}
'알고리즘 > Programmers' 카테고리의 다른 글
Programmers / Sort / 가장 큰 수 (0) | 2020.09.07 |
---|---|
Programmers / Sort / K번째수 (0) | 2020.09.06 |
Programmers / Stack, Queue / 다리를 지나는 트럭 (0) | 2020.09.06 |
Programmers / Stack, Queue / 기능개발 (0) | 2020.09.06 |
Programmers / Stack, Queue / 주식가격 (0) | 2020.09.06 |