https://www.acmicpc.net/problem/14241
최대 힙을 이용해서 최대값 2개를 추출해서 계산하도록 코드를 구현한다
#include <iostream>
#include <queue>
using namespace std;
int main() {
// 최대힙
int N;
cin >> N;
int s = 0;
priority_queue<int, vector<int>, less<int>> pq;
for (int i = 0;i < N;i++) {
int num;
cin >> num;
pq.push(num);
}
for (int i = 0;i < N-1 ;i++) {
int a = pq.top();
pq.pop();
int b = pq.top();
pq.pop();
s += a * b;
pq.push(a + b);
}
cout << s;
return 0;
}
이 코드는 자료구조를 배우기 전에 파이썬으로 구현한 코드이다
t=int(input())
hap=0
List=list(map(int,input().split()))
for i in range(t-1):
List.sort()
hap+=List[0]*List[1]
List.append(List[0]+List[1])
del(List[0])
del(List[0])
print(hap)
for문이 실행될 때마다 매번 정렬하기 때문에 비효율적인 코드가 된다
길이가 짧다고 좋은 코드가 아님을 인지하자!