STUDY/Algorithm

[백준] 2798 블랙잭

sinawi95 2021. 3. 4. 10:24
728x90

www.acmicpc.net/problem/2798

 

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