https://www.acmicpc.net/problem/2798
블랙잭은 카드의 합이 21을 넘지 않는 범위에서,
카드의 합을 최대한 크게 만드는 게임이다.
이 문제에선 주어진 정렬되지 않은 n장의 카드에 대해,
m을 넘지 않는, m에 가장 가까운 카드 3장의 합을 구하면 된다.
n은 3 이상 100 이하의 정수이고,
m은 10 이상 300,000 이하의 정수이다.
결국 모든 케이스를 확인해야 하는데,
3중 for문으로 모든 경우를 탐색해도 시간이나 공간 복잡도 문제가 없다.
즉, 브루트 포스로 접근하여 문제를 풀 수 있다.
코드(정답)는 다음과 같다.
import sys
n, m = map(int, sys.stdin.readline().split())
cards = list(map(int, sys.stdin.readline().split()))
max_sum = 0
for i in range(n):
for j in range(i + 1, n):
for k in range(j + 1, n):
temp_sum = cards[i] + cards[j] + cards[k]
if temp_sum <= m:
if temp_sum > max_sum:
max_sum = temp_sum
print(max_sum)