728x90
🔗 문제 링크
1715번: 카드 정렬하기
정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장
www.acmicpc.net
💡 문제 풀이 및 해석
- 만약 카드의 숫자가 N개라면 반드시 N-1번의 계산을 해야 한다.
- 여기서 가장 적은 수를 더해야 한다.
- 항상 가장 작은 두 집합을 더해준다. 이러면 결과적으로 가장 작은 수가 나온다.
- 만약, 큰 수가 들어가게 된다면, 그 수는 총 연산에서 이번 연산을 제외하고 반드시 한번 더 들어가야 하므로 최소값이 될 수 없다.
⭐️ 정답 코드 및 설명
#include <iostream>
#include <queue>
using namespace std;
int n;
priority_queue<int> q;
void input(){
cin >> n;
for(int i = 0; i < n; i++){
int num; cin >> num;
q.push(-num);
}
}
long sol(){
long answer = 0;
while(q.size() > 1){
int num1 = -q.top(); q.pop();
int num2 = -q.top(); q.pop();
int num3 = num1 + num2;
answer += num3;
q.push(-num3);
}
return answer;
}
int main(){
input();
cout << sol();
return 0;
}
🤔 문제 후기
딱히 어려운 점은 없었다.
728x90
'문제풀이 > 알고리즘 문제 풀이' 카테고리의 다른 글
[ 백준 15686 ] 치킨 배달 (C++) - BruteForce, 조합 (0) | 2024.04.09 |
---|---|
[ 백준 9251 ] LCS (C++) - DP (0) | 2024.04.09 |
[ 프로그래머스 ] 파괴되지 않은 건물 (C++) - 누적합 (0) | 2024.04.06 |
[ 프로그래머스 ] 주차 요금 계산 (C++) - 구현 (0) | 2024.04.05 |
[ 프로그래머스 ] K진수에서 소수 구하기 (C++) - 수학 (0) | 2024.04.05 |