https://programmers.co.kr/learn/courses/30/lessons/42626
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<int> s, int K) {
int answer = 0;
priority_queue<int, vector<int>, greater<int> > pq(s.begin(), s.end()); // 오름차순 자동정렬 큐
int length = pq.size();
int tmp;
while(pq.size()>1 && pq.top() < K){
tmp = pq.top(); pq.pop();
tmp += 2*pq.top(); pq.pop();
pq.push(tmp);
answer++;
}
if (pq.top()<K) return -1;
return answer;
}
- 무조건 큐 자료구조를 써야하는 문제, 그렇지 않으면 시간초과 발생
- 이걸 모른 상태에서 계속해서 문제 시도 + 큐 자료구조 배우는데 걸리는 시간 = 시간 많이 쏟음
- queue라이브러리를 선언하고 priority_queue 자료형을 이용해 pq라는 큐를 선언
- 이때 greater라는 옵션을 줘서 오름차순|자동정렬 큐 생성
- 주어지는 s벡터의 값을 넣어줘야 하므로 끝에 pq(s.begin(), s.end()) 작성
- [1, 2, 3, 9, 10, 12] 이렇게 주어지면 pq.top()은 1이다. 따라서 pop해주면 최소값 날라가고 새로운 최소값이 top이 되는 구조.
- pq.push(tmp)를 하면 값이 추가되면서 자동으로 정렬이 되는 신기한 자료구조
'자기개발👨💻 > 코딩 알고리즘' 카테고리의 다른 글
[C++] 백준 11651 // <vector><map> (0) | 2022.03.16 |
---|---|
[C++] 백준 1302 베스트셀러 // <map> (0) | 2022.03.16 |
[C++] 백준 9012 괄호 (알고스터디 E조) (0) | 2022.03.15 |
[C++] 백준 1448 삼각형 만들기 (0) | 2022.02.28 |
[C++] 백준 2309 일곱 난쟁이 (0) | 2022.02.27 |
[python] 프로그래머스 실패율 (0) | 2022.02.10 |