본문 바로가기
Algorithm/DFS&BFS&백트래킹&재귀

[백준] 2961번 도영이가 만든 맛있는 음식

by HANNI하니 2023. 10. 30.

사용 언어 - Python3

문제 -  2961번 도영이가 만든 맛있는 음식

 

2961번: 도영이가 만든 맛있는 음식

첫째 줄에 재료의 개수 N(1 ≤ N ≤ 10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은

www.acmicpc.net

 

 

정답

재귀함수로 푼 풀이

def recur(idx, sin, sun, use)

recur(인덱스수, 신맛, 쓴맛, 사용한 재료수)

인덱스 한개씩 늘려가면서 반복해주기

신맛은 1, 쓴맛은 0으로 초기값 설정 recur(0,1,0,0)

 

- 해당 재료 사용 했다면, 신맛은 곱하기 쓴맛은 더하기 재료수는 +1 로 업데이트

- 해당 재료 사용 안했다면, 단맛, 신맛, 재료수 그대로

 

- 재료 무조건 1개 이상 사용해야 함

- 신맛과 쓴맛의 차이와 answer 1e9 중 더 작은 값으로 answer 업데이트

print(answer)

 

def recur(idx, sin, sun, use):
    global answer
    
    if idx == n:
        if use > 0 : # 재료 무조건 1개 이상 사용
            answer = min(answer, abs(sin - sun))
        return
    # 재료 사용 O
    recur(idx+1, sin*ingre[idx][0], sun+ingre[idx][1], use+1)
    # 재료 사용 X
    recur(idx+1, sin, sun, use)

n = int(input()) # 재료의 개수
ingre = [list(map(int,input().split())) for _ in range(n)]
answer = 1e9
recur(0,1,0,0) # 초기값 신맛=1, 쓴맛=0
print(answer)

 

 

 

레퍼런스

  • 깃허브 정답

https://github.com/yyeongeun/codingtest/blob/main/BAEKJOON/2961_%EB%8F%84%EC%98%81%EC%9D%B4%EA%B0%80%EB%A7%8C%EB%93%A0%EB%A7%9B%EC%9E%88%EB%8A%94%EC%9D%8C%EC%8B%9D.py

 

댓글