728x90
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
n, m = map(int, input().split())
cards = list(map(int, input().split()))
max_val = 0
def blackjack(index=0, visit_index=-1, arr=[], length=n, key=m):
if index == 3:
if sum(arr) > key: return
global max_val
if max_val < sum(arr):
max_val = sum(arr)
return
else:
for i in range(visit_index + 1, length):
blackjack(index=index+1, visit_index=i, arr= arr+[cards[i]])
blackjack()
print(max_val)
브루트포스로 구하면 되는 문제이긴하다.
이전에 브루트포스로 풀어보았기 때문에 백트래킹으로 다시 풀어보았다.
m을 넘는 경우에만 조건을 걸어서 넘어갔다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2583 영역구하기 (0) | 2021.03.04 |
---|---|
[백준] N과 M (시리즈) (0) | 2021.03.04 |
[백준] 2309 일곱 난쟁이 (0) | 2021.03.04 |
[백준] 7569 토마토 (2) | 2021.03.02 |
[백준] 7576 토마토 (0) | 2021.03.02 |