본문 바로가기

코딩테스트/Python

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

문제


https://programmers.co.kr/learn/courses/30/lessons/43165

 

코딩테스트 연습 - 타겟 넘버

n개의 음이 아닌 정수들이 있습니다. 이 정수들을 순서를 바꾸지 않고 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수

programmers.co.kr

 

 

 

풀이


def dfs(numbers,depth,num,target):
    global cnt
    if depth == len(numbers):
        if num == target : cnt+=1
        return
    
    dfs(numbers,depth+1,num+numbers[depth],target)
    dfs(numbers,depth+1,num-numbers[depth],target)

def solution(numbers, target):
    global cnt
    cnt=0
    dfs(numbers,0,0,target)
    
    return cnt

 

숫자마다 + 와 - 하는 방법이 있으므로 num+numbers[depth],num-numbers[depth]를 변수로 넘겨주면서 재귀 호출을 해준다.

 

재귀 반복 횟수(depth)가 numbers의 길이와 같아졌을때까지 재귀를 반복한다.

길이가 같을때 target과 값이 같다면 cnt를 증가시켜준다.