난이도 : D3
문제번호 : 5215
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
평소 햄버거를 좋아하던 민기는 최근 부쩍 늘어난 살 때문에 걱정이 많다. 민기가 주로 이용하는 햄버거 가게에서는 고객이 원하는 조합으로 햄버거를 만들어서 준다. |
입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스의 첫 번째 줄에는 재료의 수, 제한 칼로리를 나타내는 N, L(1 ≤ N ≤ 20, 1 ≤ L ≤ 10^4)가 공백으로 구분되어 주어진다. 다음 N개의 줄에는 재료에 대한 민기의 맛에 대한 점수와 칼로리를 나타내는 Ti, Ki(1 ≤ Ti ≤ 10^3, 1 ≤ Ki ≤ 10^3)가 공백으로 구분되어 주어진다. |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 주어진 제한 칼로리 이하의 조합중에서 가장 맛에 대한 점수가 높은 햄버거의 점수를 출력한다. |
예시
입력 | 출력 |
1 |
#1 750 |
2. 문제풀이
입력시 맛점수와 칼로리 순으로 들어온다. dfs를 이용해서 풀었으며 dfs에 들어갈때마다 누적된 칼로리를 봐서 L을 넘어간다면 리턴시킨다. 최고 맛점수보다 누적 맛점수가 높다면 갱신시켜준다. 마지막까지 내려왔다면 인덱스 에러가 나지 않도록 리턴시킨다. 재료를 사용한 경우와 사용하지 않은 경우 2가지를 이용하여 재귀를 한다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#D3 5215 햄버거 다이어트
#깊이우선탐색
def dfs(index, sum_flavor = 0, sum_kal = 0):
global max_flavor
#칼로리 넘어가면 리턴
if sum_kal > L: return
#최고 맛점수보다 높으면 갱신
if max_flavor < sum_flavor: max_flavor = sum_flavor
#마지막 인덱스까지 내려왔다면 리턴
if index == N : return
flavor, kal = kal_list[index]
#재료를 사용했을때
dfs(index+1, sum_flavor + flavor, sum_kal + kal)
#재료를 사용하지 않았을때
dfs(index+1, sum_flavor, sum_kal)
T = int(input())
for t in range(1,T+1):
N, L = map(int, input().split())
kal_list = [list(map(int, input().split())) for _ in range(N)]
max_flavor = 0
dfs(0)
print("#{} {}".format(t, max_flavor))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
세제곱근을 찾아라 Python(SW Expert Academy) (0) | 2020.04.06 |
---|---|
의석이의 세로로 말해요 Python(SW Expert Academy) (0) | 2020.04.05 |
N-Queen Python(SW Expert Academy) (0) | 2020.04.02 |
다솔이의 다이아몬드 장식 Python(SW Expert Academy) (0) | 2020.04.01 |
미로의 거리 Python(SW Expert Academy) (0) | 2020.03.31 |
댓글