알고리즘 적용 후 위치와 값을 둘 다 확인해야 되는 문제일 때 인덱스만 들어있는 컨테이너로 쉽게 풀 수 있다.
큐에 인덱스를 모두 넣어준 뒤 무한 반복으로 값을 체크하고 값이 나올 때 리턴한다.
최댓값을 체크할 때는 max_element를 사용한다.
max_element는 최댓값의 이터레이터를 리턴한다.
앞에서 만든 큐에서 빼오는 값이 최댓값의 인덱스일 때 카운트를 증가시키고 값을 0으로 바꾼다.
만약 그 위치가 구하려는 위치일 때 카운트를 리턴한다.
최댓값이 아니라면 큐에서 빼내서 큐의 꼬리에 다시 넣는다.
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
#include <iostream>
using namespace std;
int solution(vector<int> priorities, int location) {
queue<int> indexes;
for (size_t i = 0; i < priorities.size(); i++)
{
indexes.push(i);
}
int cnt = 0;
while (true)
{
int front = indexes.front();
if (priorities[front] == *max_element(priorities.begin(), priorities.end()))
{
++cnt;
priorities[front] = 0;
if (location == front)
return cnt;
indexes.pop();
}
else
{
indexes.pop();
indexes.push(front);
}
}
}
int main()
{
cout<<solution({ 1, 1, 9, 1, 1, 1 }, 0);
}
실행결과
5