백준_2798_블랙잭(브루트포스)

맹민재·2023년 3월 28일
0

알고리즘

목록 보기
8/134
def dfs(m, deph, sum):
    global result
    if deph == 3:
        if sum <= m:
            result = max(result, sum)
        return
    for i in range(len(card_list)):
        if not visited[i]:
            visited[i] = True
            dfs(m, deph+1, sum + card_list[i])
            visited[i] = False
    

n, m = [int(v) for v in input().split()]
card_list = list(map(int, input().split()))

result = 0
visited = [False] * n
dfs(m, 0, 0)
print(result)

dfs로 해당 문제 해결!

이전에 풀었던 방법

from itertools import combinations

n, m = [int(v) for v in input().split()]
card_list = [int(v) for v in input().split()]

max_num = 0

for card in combinations(card_list, 3):
   tmp = sum(card)
   if tmp > max_num and tmp <= m:
       max_num = tmp
print(max_num)

이전에는 combination으로 해결했었다.

효율성을 비교해 보면

이전의 방식이 더 효율적이다. 쉽게 풀었긴했지만 잊고 있었던 combination을 다시 한번 생각나게 해준 고마운 문제이다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글