목록Heap (3)
컴굥일지

문제 https://school.programmers.co.kr/learn/courses/30/lessons/42626 문제 내용 음식들의 지수가 모두 K 이상이 되기 위해 몇 번의 연산이 필요한지를 출력하면 된다. (불가능하면 -1 출력) 연산은 (가장 낮은 지수 + 그 다음으로 낮은 지수*2) 로 계산되며, 사용된 음식은 사라지고 연산에 의해 새로운 음식이 추가된다고 생각하면 된다. 문제 풀이 우선순위큐로 문제를 쉽게 해결할 수 있다.(heap) 이때 우선순위 큐의 사이즈에 주의하자. 원소가 없는데 top(), pop() 연산을 하면 에러가 난다. (한참 헤맸다) 코드 #include #include #include using namespace std; int solution(vector scovil..

문제 https://www.acmicpc.net/problem/1715 문제 내용 정렬된 두 묶음의 숫자카드가 있다. 각 묶음의 카드의 수가 A, B개일 대, 두 묶음을 하나로 합칠 때 A+B번의 비교가 필요하다. N개의 카드 묶음을 받아, 이들을 두 묶음씩 골라 서로 합쳐나가려고 한다. 최소 몇 번의 비교가 필요한지 구하면 된다. 문제 풀이 문제에 나와있는 대로, 매번 가장 묶음이 작은 것을 2개 골라 합치면 된다. priority_queue를 통해 이 문제를 해결할 수 있다. (최소힙 사용) 코드 #include #include #include using namespace std; int main() { int n, tmp; priority_queue pq; cin >> n; while (n--) {..

문제 https://school.programmers.co.kr/learn/courses/15009/lessons/121688 문제 내용 교육에는 신입사원 2명이 필요하다. 교육 이후에는 서로의 능력을 흡수하여, 두 신입사원의 능력치는 공부 전 두 사람의 능력치의 합이 된다. 신입사원들의 능력치와 총 교육 횟수를 입력받아, 모든 교육 이후에 능력치 합이 최소가 되도록 하고 싶다. (한 번 교육을 받은 사원은, 다시 선발될 수 있다.) 문제 풀이 모든 교육 이후에 능력치의 합이 최소가 되려면, 매 교육마다 능력치가 제일 작은 2명을 골라야 한다. 이를 위해 priority_queue를 사용하여, 매번 가장 작은 능력치를 뽑으면 된다. 코드 #include #include #include using name..