우선순위
가 포함된 큐 이다. 말 그대로 우선순위 큐를 이용하는 문제다.
Max Heap을 이용하면 쉽게 풀리는 문제다.
이번 문제는 Max Heap을 이용하지 않고 문제 자체에 충실하게 구현했다.
무한루프를 사용하지 않고 만들고 싶었지만 최근 결과를 보니 거의다 무한루프를 사용..
정답률도 높고 하니 한번쯤은 무한루프를 사용해도 괜찮다 생각해서 사용했다.
#include <iostream>
#include <queue>
#include <string.h>
using namespace std;
int getVeryImportant(int& n, int priority[100], bool out[100])
{
int top = 0;
for (int i = 0; i < n; i++)
if (!out[i] && top < priority[i])
top = priority[i];
return top;
}
int solution(int n, int pos, int priority[100])
{
bool isOut[100];
memset(isOut, false, sizeof(isOut));
int res = 1;
int veryImportant = getVeryImportant(n, priority, isOut);
int now = 0;
queue<int> q;
for (int i = 0; i < n; i++)
q.push(i);
while (true)
{
now = q.front();
q.pop();
if (now == pos && veryImportant == priority[now])
break;
if (veryImportant == priority[now])
{
res++;
isOut[now] = true;
veryImportant = getVeryImportant(n, priority, isOut);
}
else
q.push(now);
}
return res;
}
int main()
{
int tcc;
cin >> tcc;
for (int i = 0; i < tcc; i++)
{
int n, pos;
int priority[100];
cin >> n >> pos;
for (int j = 0; j < n; j++)
cin >> priority[j];
cout << solution(n, pos, priority) << '\n';
}
return 0;
}
2019-01-10 10:30:00에 Tistory에서 작성되었습니다.