728x90
https://www.acmicpc.net/problem/15903
15903번: 카드 합체 놀이
첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,
www.acmicpc.net
접근 방법
예제를 보면 쉽게 해결할 수 있는 문제이다. 최종적으로 모든 카드의 합이 최소가 되어야 한다.
최소가 되기 위해선 당연하게 가장 작은 카드 2개를 선택하면 된다.
매우 간단하게 해결할 수 있는 그리디 문제이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<long> v;
int n, m;
int main() {
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++) {
long tmp;
cin >> tmp;
v.push_back(tmp);
}
for (int i = 0; i < m; i++) {
sort(v.begin(), v.end());
long sum = v[0] + v[1];
v[0] = sum;
v[1] = sum;
}
long sum= 0;
for (int i = 0; i < n; i++)
sum += v[i];
cout << sum;
}
더했을 때 합이 꽤 커지기 때문에 int보다 더 넓은 범위를 나타낼 수 있는 long을 사용하였다.
728x90
'📊알고리즘 > BOJ' 카테고리의 다른 글
[그리디 #4] BOJ 1744 - 수 묶기 (1) | 2024.02.07 |
---|---|
BOJ 2170 선 긋기 (1) | 2024.02.05 |
[그리디 #2] BOJ1541 잃어버린 괄호 (0) | 2023.11.12 |
[그리디 #1] BOJ 11501 주식 (0) | 2023.11.10 |
{BOJ 2839} 설탕 배달 (DP) (0) | 2023.09.24 |