문제
풀이
DFS를 이용해 풀이하였음.
햄버거 재료수(N), 넘지 말아야 하는 칼로리수(L)을 입력받고
리스트를 생성하고 재료의 맛과 칼로리를 저장한 후
재료가 저장된 리스트의 인덱스 0 부터 끝까지 깊이 우선 탐색함.
탐색할때마다 칼로리가 넘어가면 탐색을 수행하지 않고
기존에 저장된 최대 맛보다 크면 갱신 과정을 거침
재료를 썼을 때, 안 썼을 때 를 각각 탐색함.
def dfs(index, sTaste, sKcal):
global maxTaste
# 총 칼로리를 넘으면 리턴
if sKcal > L:
return
# taste의 합이 제일큰 taste 합보다 크면 갱신
if maxTaste < sTaste:
maxTaste = sTaste
# 햄버거 재료 데이터를 다 돌면 리턴
if index == N:
return
# index 파라미터를 통해 taste, kcal 대입
taste, kcal = data[index]
# 햄버거 재료 리스트에서 재료를 사용했을 때
dfs(index + 1, sTaste + taste, sKcal + kcal)
# 햄버거 재료 리스트에서 재료를 사용하지 않았을 때
dfs(index + 1, sTaste, sKcal)
t = int(input())
for tc in range(1, t+1):
# N: 햄버거 재료 수, L: 넘지 말아야 하는 칼로리 양
N, L = map(int, input().split())
# 햄버거와 칼로리 리스트 저장
data = [list(map(int, input().split())) for _ in range(N)]
maxTaste = 0
dfs(0, 0, 0)
print("#{} {}".format(tc, maxTaste))
'Problem Solving > CT-Python' 카테고리의 다른 글
[백준/DP] 11053: 가장 긴 증가하는 부분 - 파이썬 (0) | 2022.05.30 |
---|---|
[백준/DP] 1463: 1로 만들기 - 파이썬 (0) | 2022.05.24 |
[SWEA/구현] 10570[D3]: 제곱 팰린드롬 수 - 파이썬 (0) | 2022.05.23 |
[프로그래머스/완전탐색] L2: 카펫 - 파이썬 (0) | 2022.05.20 |
[백준/구현] 13904: 과제 - 파이썬 (0) | 2022.05.18 |