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을 다시 한번 생각나게 해준 고마운 문제이다.