문제는 이 링크를 타고 가시면 있습니다.
저는 이 문제를 풀면서 다음 세가지를 생각해보았습니다.
- 문제에서 나온 로직 자체를 프로그래밍 하면 계산 시간이 너무 오래 걸린다.
- 어떤 꼼수가 없을까?
- 굳이 번호를 뒤로 가져다 붙인다고 생각하기보다 번호를 가리키는 화살표가 있어서 한칸 씩 움직이고 끝까지 갔을 때는 다시 돌아오면 되지 않을까?
다음과 같은 코드로 문제를 해결하였습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(const int & a, const int & b) {
return (a < b);
}
int solution(vector<int> priorities, int location) {
int answer = 0;
vector<int>::iterator iter;
iter = priorities.begin();
while (1) {
if (*iter == *std::max_element(priorities.begin(), priorities.end(), compare)) {
answer++;
*iter = 0;
if (std::distance(priorities.begin(), iter) == location) {
break;
}
}
iter++;
if (iter == priorities.end()) iter = priorities.begin();
}
return answer;
}
'개발 관련 기타 > 알고리즘' 카테고리의 다른 글
[프로그래머스] (C++) 카펫 (0) | 2019.12.04 |
---|---|
[프로그래머스] (C++) 단체사진 찍기 (0) | 2019.11.26 |
[프로그래머스] (C++) 숫자의 표현 (0) | 2019.11.22 |
[프로그래머스] (C++) 체육복 (0) | 2019.11.18 |
[프로그래머스] (C++) 땅따먹기 (0) | 2019.11.18 |