programmers.co.kr/learn/courses/30/lessons/42587
※ 절대적인 해답은 당연히 아니고 제 마음대로 풀었으니 참고용으로 봐주세요
어떻게 풀까 고민을 하다 location값을 언제 찾아줘야 하는지가 애매해서 queue에 index값을 넣어주기로 했다.
1. q를 만들고 거기에 priorities(vector<int>) 우선순위들이 들어있는 벡터의 사이즈만큼 값을 채워준다.
for (int i = 0; i < p_size; ++i)
{
q.push(i);
}
2. while문을 돌면서 queue의 값을 체크
2-1. q의 제일 앞에 있는 index값을 빼온다
(여기의 index값이란 priorities 벡터의 index를 가리키는 값임)
2-2. for문을 돌면서 현재의 index값(temp)과 i의 값을 비교해 나보다 더 큰 우선순위가 존재한다면 해당 인덱스 값이 맨 뒤로 가게 큐에서 빼서 다시 넣어준다.
2-3. 만약에 인덱스 값의 변화가 일어나지 않았다면(=내가 제일 우선순위가 크다면) for문 안에서 IsChange가 true가 되지 않았을 것이므로 false이면 큐에서 인덱스를 빼주고 해당 인덱스값이 가리키는 우선순위 벡터의 값을 0으로 만들어준다.
왜 0인지? 우선순위는 1~9로 0이면 어떠한 우선순위보다 작게 되므로 for문 안에서 체크 시 제외된다.
2-4. 만약 IsChange가 false일 때 temp값(현재 검사하고 있는 index값)이 location과 같다면 while문을 나와서 결과값을 리턴한다.
int solution(vector<int> priorities, int location) {
int answer = 0;
int p_size = priorities.size();
queue<int> q;
for (int i = 0; i < p_size; ++i)
{
q.push(i);
}
while (1)
{
int temp = q.front();
int IsChange = false;
for (int i = 0; i < p_size; ++i)
{
if (i == temp)
{
continue;
}
if (priorities[temp] < priorities[i])
{
q.pop();
q.push(temp);
IsChange = true;
break;
}
}
if (!IsChange)
{
q.pop();
priorities[temp] = 0;
answer += 1;
if (temp == location)
{
break;
}
}
}
return answer;
}
'알고리즘 & 자료구조 > 프로그래머스' 카테고리의 다른 글
[C++/알고리즘] 프로그래머스 (JadenCase 문자열 만들기) (0) | 2020.09.25 |
---|---|
[C++/알고리즘] 프로그래머스 (카펫) (0) | 2020.09.11 |
[C++/알고리즘] 프로그래머스 (문자열 압축) (0) | 2020.09.09 |
[C++/알고리즘] 프로그래머스 (보석 쇼핑) (0) | 2020.09.08 |
[C++/알고리즘] 프로그래머스 (크레인 인형 뽑기) (0) | 2020.09.03 |