[백준] 2798. 블랙잭
N장의 카드에 써져 있는 숫자가 주어졌을 때, M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합을 구해 출력하라.
경우의 수를 다룰 때 나오는 조합에 대한 문제로, 아래와 같이 모든 경우의 수를 찾아낸 후 조건에 맞게 결과를 출력해주면 된다.
(n, m), l = ([int(x) for x in input().split()] for _ in range(2))
print(
max(
x for x in (
l[a] + l[b] + l[c]
for a in range(n - 2)
for b in range(a + 1, n)
for c in range(b + 1, n)
) if x <= m
)
)
Python에는 조합을 위한 내장 클래스 combinations
가 있다. combinations
를 사용하면 아래와 같이 간결하게 만들 수 있다.
from itertools import combinations
(n, m), l = ([int(x) for x in input().split()] for _ in range(2))
print(max(x for x in (sum(x) for x in list(combinations(l, 3))) if x <= m))