반응형
250x250
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 | 31 |
Tags
- 몰입캠프후기
- 궁동
- nodeJS
- MySQL
- 대전맛집
- DP
- 리사이클러뷰
- glfw
- 위상정렬
- 백준
- computergraphics
- 컴퓨터그래픽스
- 어은동맛집
- 알고리즘
- 앱개발
- html
- 프래그먼트
- 안드로이드스튜디오
- 우선순위큐
- 카이스트
- node.js
- 후기
- 자바스크립트
- 몰입캠프
- BFS
- 프로그래머스
- 카이스트맛집
- 분리집합
- 자바
- 타입스크립트
Archives
- Today
- Total
소근소근
[백준 BOJ 1715 gold4 - 카드 정렬하기] priority queue(힙, 우선순위 큐 ) , c++ 본문
Algorithm
[백준 BOJ 1715 gold4 - 카드 정렬하기] priority queue(힙, 우선순위 큐 ) , c++
JJureng 2021. 12. 29. 16:17728x90
반응형
SMALL
백준 1715 카드 정렬하기
https://www.acmicpc.net/problem/1715
카드 묶음 A와 B를 묶기 위해서는 A+B만큼의 비교가 필요하다.
여러 묶음이 있을 때 다 하나의 묶음으로 만들기 위해 필요한 '최소' 비교 회수를 구해야 한다.
작은 것부터 묶었을 때가 최소가 되는 것을 예제를 보면 쉽게 알 수 있다.
priority queue를 사용해서 작은 것부터 묶고, 묶고난 것을 다시 queue에 넣어주면서 반복한다.
처음에 queue에 다 넣고 단순히 앞에서부터 묶는 걸로 풀었는데 틀렸습니다가 떴다.
-> 앞의 두개를 묶고 이 묶은 것을 다시 queue에 넣어줘야 한다.
예를 들어 1 2 3 4 5 6 이 있을 때
틀린 방법 ) 그냥 앞에서부터 1+2 / 3+3 / 6+4 ...
1 2 3 까지 묶었을 때의 크기는 6이고, 이때 묶음의 종류는 4 5 6 6 이 된다. 그러므로 6+4 가 아니라 작은 두수 4+5 를 해줘야 한다.
while (!pq.empty()) {
int first = -pq.top();
pq.pop();
int second = -pq.top();
pq.pop();
total += (first + second);
if (pq.empty()) break;
pq.push(-(first + second));
}
728x90
반응형
LIST