-
6주차 - 우선 순위 큐 사용 문제old/Algorithm 2020. 7. 18. 22:10728x90
프로그래머스 레벨 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
풀이 요약
이건 몇번 합친지 구하면 되는 문제이다. 그래서 오름차순 우선 순위 큐를 사용해서 가장 작은 값이 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;
'old > Algorithm' 카테고리의 다른 글
8주차 가장큰정사각형찾기/단체사진찍기/올바른괄호 (0) 2020.07.25 7주차 프로그래머스 레벨2 풀기(조이스틱 문제/숫자 야구/라면공장) (0) 2020.07.25 6주차 후기(레벨 2가 너무 어려워요) (0) 2020.07.17 5주차 - 카카오 가사검색 문제 (0) 2020.07.12 5주차 카카오문제(자물쇠와 열쇠) (0) 2020.07.12