Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 2020 KAKAO BLIND
- Level 2
- 삼성 SW 역량 테스트
- Gold 4
- Gold 5
- 브루트포스
- DFS
- 프로그래머스
- 구현
- c++
- 시뮬레이션
- BFS
- next_permutation
- 백준
- DP
- 부스트코스
- 월간 코드 챌린지
- 스택/큐
- Level 4
- SWEA
- 그리디
- 코드리뷰
- level 1
- pass
- 코드 리뷰
- Web
- 2020 카카오 인턴십
- 백트래킹
- 2019 KAKAO BLIND
- Level 3
Archives
- Today
- Total
Min:D's Devlog
[프로그래머스][힙][C++] 더 맵게 본문
문제
프로그래머스 힙 - 더 맵게 (Level 2)
문제 풀이
접근 방식
아래와 같은 방법으로 새로운 음식을 만들 때,
모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 구하는 문제이다.
가장 작은 값과 두 번째로 작은 값을 지속적으로 구해야하는 문제이기 때문에,
우선순위 큐를 사용하여 min heap을 구현해주었다.
우선순위 큐에 모든 음식의 스코빌 지수를 넣어준 후,
우선순위 큐의 top에 있는 값(최솟값)이 K 이상일 때까지 위의 계산식을 사용하여 음식을 섞어주었다.
우선순위 큐의 사이즈가 1일 때는 더 이상 음식을 섞을 수 없는 상황이므로 -1을 리턴해주도록 구현하였다.
풀이 코드 - C++
#include <string>
#include <vector>
#include <queue>
#include <functional>
using namespace std;
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue<int, vector<int>, greater<int> > pq;
for(int i: scoville)
pq.push(i);
while(true) {
if(pq.top() >= K)
return answer;
if(pq.size() == 1)
return -1;
int a = pq.top(); pq.pop();
int b = pq.top(); pq.pop();
pq.push(a+b*2);
answer++;
}
}
실행 결과
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 쿼드압축 후 개수 세기 (0) | 2020.11.19 |
---|---|
[프로그래머스][월간 코드 챌린지 시즌 1][C++] 3진법 뒤집기 (0) | 2020.11.16 |
[프로그래머스][해시][C++] 베스트앨범 (0) | 2020.10.26 |
[프로그래머스][스택/큐][C++] 프린터 (0) | 2020.10.23 |
[프로그래머스][스택/큐][C++] 주식가격 (0) | 2020.10.21 |
Comments