Haribo ML, AI, MATH, Algorithm

타겟 넘버

2021-01-20
Haribo

타겟 넘버

코드

def dfs(numbers, index=0, total=0, target=0):
    if index == len(numbers):
        return 1 if total == target else 0

    number = numbers[index]
    return dfs(numbers, index + 1, total + number, target) + dfs(numbers, index + 1, total - number, target)

def solution(numbers, target):
    return dfs(numbers, target=target)
# Product 방식
from itertools import product
def solution(numbers, target):
    l = [(x, -x) for x in numbers]
    s = list(map(sum, product(*l)))
    return s.count(target)

product

product 함수는 카디션곱을 해준다.

a = ['ab', '12', 'AB']
list(product(*a))
[('a', '1', 'A'),
 ('a', '1', 'B'),
 ('a', '2', 'A'),
 ('a', '2', 'B'),
 ('b', '1', 'A'),
 ('b', '1', 'B'),
 ('b', '2', 'A'),
 ('b', '2', 'B')]

풀이

각 숫자별 +/- 기호를 넣은 경우의 수를 만들어 map(sum, 카디션곱) 리스트를 만든다

target 의 개수를 센다


Similar Posts

다음 포스트 튜플

Comments