Published:
Updated:

  • 이건 자잘한 문제들 때문에 더 어려웠음
    • answer를 float('int')로 선언하다 보니 생기는 문제들을 해결하는 데 시간을 더 썼다.


Solution

import sys
from typing import List


def solution(favors_list: List[List[int]]) -> int:
    answer = float('inf')
    check = [False] * len(favors_list)

    def dfs(cnt: int, depth: int, S: int, B: int):
        nonlocal answer

        if cnt >= 1:
            answer = min(abs(S - B), answer)

        for i in range(depth, len(favors_list)):
            if check[i]:
                continue

            check[i] = True
            dfs(cnt + 1, i, S * favors_list[i][0], B + favors_list[i][1])
            # 백트래킹
            check[i] = False

    dfs(0, 0, 1, 0)

    return answer


N = int(sys.stdin.readline().rstrip())
favors_list: List[List[int]] = []

for _ in range(N):
    favors_list.append(list(map(int, sys.stdin.readline().rstrip().split())))

print(solution(favors_list))


Reference

Leave a comment