programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같
programmers.co.kr
코드설명
처음에는 K값이 이렇게 큰줄 모르고 단순 구현하였다... (scoville 벡터를 매번 sort하고 erase,push_back) 방식으로..
하지만 당연히 효율성에서 시간초과가 났고 아차싶었다
우선수위큐(minHeap)을 통해 O(N)으로 코드를 다시 짰다.
그리고 pop()을 두번 하는과정이 있기때문에 중간에 큐가 빈건 아닌지 꼭 한번더 체크하자!!!!!!!!!!!!!!!!!!!!!!!
안하면 core dumped
코드
#include <string>
#include <vector>
#include <iostream>
#include <queue>
using namespace std;
priority_queue<int,vector<int>,greater<int>> pq;
int solution(vector<int> scoville, int K) {
int answer = 0;
for(int i=0;i<scoville.size();i++){
pq.push(scoville[i]);
}
int cnt=0;
while(pq.top() < K && !pq.empty()){
int temp=pq.top();
pq.pop();
temp=temp+pq.top()*2;
if(pq.empty()) break;
pq.pop();
pq.push(temp);
cnt++;
}
if(pq.empty()) answer=-1;
else{
answer=cnt;
}
return answer;
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 단어변환 (C++) (0) | 2021.05.29 |
---|---|
[프로그래머스] 네트워크 (C++) (0) | 2021.05.29 |
[프로그래머스] 프린터 (0) | 2021.04.30 |
[프로그래머스] 기능개발 (0) | 2021.04.30 |
[프로그래머스] 타겟넘버 (0) | 2021.04.27 |