본문 바로가기
📊알고리즘/BOJ

[그리디 #3] 카드 합체 놀이

by meteorfish 2024. 2. 5.
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