Computer Science/Algorithm Problem

백준] 2798 - 블랙잭(COCI 2011/2012)

TwinParadox 2018. 1. 23. 22:37
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 써있는 수가 주어지며, 이 값은 100,000을 넘지 않는다.




출력

첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 출력한다.




소스코드

#include <iostream>
using namespace std;
int main(void)
{
	int n, m, arr[100], ans = 0;
	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> arr[i];
	for (int i = 0; i < n - 2; i++)
		for (int j = i + 1; j < n - 1; j++)
			for (int k = j + 1; k < n; k++)
				if (arr[i] + arr[j] + arr[k] <= m && m - (arr[i] + arr[j] + arr[k]) < m - ans)
					ans = arr[i] + arr[j] + arr[k];
	cout << ans;
}




Tip

단순 구현 문제로, 반복문만 잘 쓸 수 있으면 쉽게 풀 수 있다.


728x90