문제 출처
1. 문제설명
- 카드를 두 묶음씩 골랐을 때 비교횟수를 구하는 문제
- 예를 들어 10장, 20장, 40장이 있을 때
- (10 + 20) + (30 + 40) = 100이 된다.
2. 알고리즘 설계
- 위의 예시로 알고리즘을 설계해보자.
- 2개씩 골라 더한다.
- 만약 이전에 더했던 합이 있다면,
- 하나만 골라 이전의 합과 더한다.
3. 로직
- 우선순위 큐를 이용하였다.
min_heap
에 값을 전부 넣는다.
- 작은 값부터 2개씩 꺼내면서 더한 값을 정답에 갱신해준다.
- 예시
10, 20, 40 // Input
- 10 + 20 = 30 // ans : 30, pq : {30, 40}
- 30 + 40 = 100 // ans : 100, pq : {}
4. 전체 코드
5. 소감
- 두개 씩 더하는 것이므로,
pq.size() > 1
일 때까지 !