[백준/c++] 14241: 슬라임 합치기

나경·2024년 10월 25일
0

https://www.acmicpc.net/problem/14241

정답 코드1

최대 힙을 이용해서 최대값 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;
}

정답 코드2

이 코드는 자료구조를 배우기 전에 파이썬으로 구현한 코드이다

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문이 실행될 때마다 매번 정렬하기 때문에 비효율적인 코드가 된다
길이가 짧다고 좋은 코드가 아님을 인지하자!

0개의 댓글