[프로그래머스] 타겟 넘버

Tae-Kyun Kim·2022년 1월 21일
0

풀이

answer = 0

def dfs(dest, dest_len, n, total, sign, target):
    if sign == '+':
        total += dest[n]
    elif sign == '-':
        total -= dest[n]
    n = n + 1
    if n == dest_len:
        if total == target:
            global answer
            answer += 1
        return
    dfs(dest, dest_len, n, total, '+', target)
    dfs(dest, dest_len, n, total, '-', target)
    
    
def solution(numbers, target):
    dest_len = len(numbers)
    dfs(numbers, dest_len, 0, 0, '+', target)
    dfs(numbers, dest_len, 0, 0, '-', target)
    return answer

후기

  • 함수로 저렇게 많은 매개변수를 넘겨줄 일이 없음
answer = 0

def dfs(dest, dest_len, n, total, target):
    if n == dest_len:
        if total == target:
            global answer
            answer += 1
        return
    dfs(dest, dest_len, n + 1, total+dest[n], target)
    dfs(dest, dest_len, n + 1, total-dest[n], target)
    
    
def solution(numbers, target):
    dest_len = len(numbers)
    dfs(numbers, dest_len, 1, numbers[0], target)
    dfs(numbers, dest_len, 1, -numbers[0], target)
    return answer
  • 넘겨주는 변수에 계산하는 식으로 넘기면 이정도로 간소화 할 수 있을 것 같다

우수코드

def solution(numbers, target):
    if not numbers and target == 0 :
        return 1
    elif not numbers:
        return 0
    else:
        return solution(numbers[1:], target-numbers[0]) + solution(numbers[1:], target+numbers[0])

다음과 같이 궁극적으로 간소화할 수 있다.

1개의 댓글

comment-user-thumbnail
2022년 3월 29일
test
답글 달기