본문 바로가기
백준

백준 15903번[c++] : 카드 합체 놀이

by 핫동경 2022. 4. 28.
반응형

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

 

15903번: 카드 합체 놀이

첫 번째 줄에 카드의 개수를 나타내는 수 n(2 ≤ n ≤ 1,000)과 카드 합체를 몇 번 하는지를 나타내는 수 m(0 ≤ m ≤ 15×n)이 주어진다. 두 번째 줄에 맨 처음 카드의 상태를 나타내는 n개의 자연수 a1,

www.acmicpc.net


풀이
  • 첫 번째 줄에 카드의 수, 합체의 수를 입력받는다
  • 두 번째 줄에 카드의 값을 나타내는 값들을 입력받는다.
  • 값들을 vector에 넣는다.
  • 최솟값을 구해야하기 때문에 가장 작은 것 두개를 더하면 된다. 
  • sort함수를 통해 정렬을 하면 배열의 0번과 1번에 가장 작은 두 값이 오게 된다.
  • 두 값을 더한뒤 0번 배열과 1번 배열에 더한값을 덮어 씌운다.
  • 배열의 값들을 모두 더한 뒤 출력한다
#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main() {
	int n, m;
	long long sum = 0;
	cin >> n >> m;
	vector<long long> card;
	long long number;

	for (int i = 0; i < n; i++) {
		cin >> number;
		card.push_back(number);
	}

	for (int i = 0; i < m; i++) {
		long long temp;
		sort(card.begin(), card.end());
		temp = card[0] + card[1];
		card[0] = card[1] = temp;
	}

	for (int i = 0; i < card.size(); i++) 
		sum += card[i];
	
	cout << sum;
	return 0;
}
반응형

댓글