코딩 테스트/백준

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

위시리 2025. 2. 11. 15:41

 

문제 분석

  • 재료 n개
  • 각 재료의 신맛 S, 쓴맛 B
  • 신맛 : 사용한 재료의 신맛의 곱
  • 쓴맛 : 사용한 재료의 쓴맛의 곱
  • 적어도 하나의 재료 사용
  • 신맛과 쓴맛의 차이가 가장 작은 요리를 만드는 프로그램

 

코드 설계

  • 재료가 총 n개 주어졌을 때
  • 1~n개의 재료를 뽑고 그때의 신맛과 쓴맛을 구한뒤, 최소 차 구하기
  • 뽑을 때는 중복 x, 순서 x : 조합 Combinations

 

정답 코드

import sys
input = sys.stdin.readline
from itertools import combinations

n = int(input())
taste = [list(map(int, input().split())) for _ in range(n)]

min_gap = float('inf')
for i in range(1, n+1) : # 1~n개까지 -> i
    for com in combinations(taste, i) : # 여러 재료 중 i개 선택
        sour = 1
        bitter = 0
        for k in range(len(com)): # 선택된 재료들의 신맛과 쓴맛의 차이 구하기
            s,b = com[k]
            sour *= s
            bitter += b
        min_gap = min(min_gap, abs(sour-bitter))
print(min_gap)