old/Algorithm
6주차 - 우선 순위 큐 사용 문제
hYhY1234
2020. 7. 18. 22:10
728x90
프로그래머스 레벨 2 깨기
프로그래머스에서 레벨2를 열심히 풀어보려는 중이다. 풀면서 좋은것이 문제 수준은 막 어렵지 않지만, 내가 약한 부분을 정리하기 딱 좋다는 것이다. 이문제는 우선순위 큐를 활용해서 푸는 문제로, 그래프 문제를 풀때 주로 큐만 사용해온 나는 이런문제를 접하는 것이 굉장히 좋다.
#include <string>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
// 우선 순위 큐
// https://twpower.github.io/93-how-to-use-priority_queue-in-cpp
// less 내림차순, greater 오름차순
// default 내림차순
int solution(vector<int> scoville, int K) {
int answer = 0;
priority_queue<int, vector<int>, greater<int>> q;
for(int i = 0; i < scoville.size(); i++){
q.push(scoville[i]);
}
while(!q.empty()){
if(q.top() >= K){
break;
}
if(q.size() < 2){
answer = -1;
break;
}
int a = q.top();
q.pop();
int b = q.top();
q.pop();
q.push(a+ b*2);
answer++;
}
return answer;
}
문제:
https://programmers.co.kr/learn/courses/30/lessons/42626
코딩테스트 연습 - 더 맵게
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같��
programmers.co.kr
풀이 요약
이건 몇번 합친지 구하면 되는 문제이다. 그래서 오름차순 우선 순위 큐를 사용해서 가장 작은 값이 k보다 클때까지 합한 갯수를 구하면 된다.
우선 순위 큐 사용법 요약:
1. 기본: 내림차순 우선 순위큐
priority_queue< int > pq;
2. greater less, 사용법
- 오름차순: priority_queue< int, vector<int>, greater<int> > pq;
- 내림차순: priority_queue< int, vector<int>, less<int> > pq;