코딩문제/백준

2798 블랙잭

Drill_Labito 2020. 7. 9. 02:22

3중 for문을 이용하여, 모든 경우의 수를 다 점검하여, 최적의 값 즉 3개의 합이 M에 가장 가까운 값을 고르는 방식 이용.  만약 M에 일치하는 값이 나오면 이미 최적의 수이므로, 반복문을 종료 하기로 하였다. 

#include <iostream>
#include <vector>

using namespace std;

int main() {
	int n, m;
	int sum = 0;
	cin >> n >> m;
	vector<int> arr;
	for (int i = 0; i < n; i++) {
		int tmp;
		cin >> tmp;
		arr.push_back(tmp);
	}
	for (int i = 0; i < n; i++) {
		for (int j = i+1; j < n; j++) {
			for (int k = j+1; k < n; k++) {
				int tmp2 = arr[i] + arr[j] + arr[k];
				if (m - tmp2 < m - sum && tmp2 <= m) {
					sum = tmp2;
					if (sum == m) break;
				}
				
			}
		}
	}
	cout << sum << endl;
	return 0;
}