1. 프로그래머스 더 맵게 문제
2. 컴퓨팅적 스킬
- 이번 문제를 해결하기 위해서는 단순 sort를 사용하는것이 아니라 우선순위큐
priority_queue<int,vector<int>,greater<int>>
오름차순 형식으로 써주어야합니다. - 단순히 while문을 통해서 안에서 sort를 처리하려고 하였지만 16번 테스트케이스를 통과하지 못하였고 효율성에서는 시간초과가 발생하였습니다. 또한, 범위값이 너무 제한적이였다. 그래서 우선순위큐를 사용하였습니다.
1 | scoville의 길이는 1 이상 1,000,000 이하입니다. |
- 주의해야할점은
우선순위큐 push는 맨앞으로 들어간다는것과 top에 있는것도 0번째 인덱스에 있는 값
입니다.
3. 컴퓨팅적 사고
- 스코빌 벡터에 있는 값을 우선순위큐에 넣어준다.
greater<int>
를 옵션으로 지정하였기 때문에 자동으로 오름차순으로 정렬해줍니다. 만약 내림차순으로 하고 싶은경우 less옵션을 사용하시면 됩니다. 첫번째, 두번째값을 통하여 스코빌 지수
를 구합니다.단 q.top()의 값이 K보다 작아야합니다.
반복문 조건
1 | 예시 |
- 기존의 while문에서는 sort를 다시해주어야하는데 우선순위 큐가 자동으로 정렬시켜주기때문에 필요없는 과정입니다.
- 만약 우선순위큐의 사이즈가 2이하가 되면 더이상 구할 수 없으므로 Return -1을 실행합니다. 그게 아니라면 계속 진행하고 q.top()의 값이 K보다 큰 경우가 있으면 더이상 반복문을 반복하지 않습니다.
4. 풀이
4.1. 1. 일반적인 sort 풀이(시간초과)
1 | // |
4.2. 우선순위큐 사용
1 | // |