(2798)-블랙잭[C++]

풀어 보기

문제

N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하시오.

입력

첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장을 찾을 수 있는 경우만 입력으로 주어진다.

출력

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

풀이 전략

삼중 루프를 통해 모든 경우의 수를 고려한다.</br> 삼중루프를 돌면서 M보다는 작고 그전 세 개의 수값보다 큰값을 찾으면 결과값

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
using namespace std;

int main() {
	int N, M;
	int arr[100];
	int result=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 && arr[i] + arr[j] + arr[k] > result){ //삼중루프를 돌면서 M보다는 작고 그전 세 개의 수값보다 큰값을 찾으면 결과값
					result = arr[i] + arr[j] + arr[k];

				}
			}
		}
	}
	cout << result << endl;
}


0%