Python/알고리즘

깊이/너비 우선 탐색(DFS/BFS) Level 2 타겟 넘버 - python (프로그래머스)

구름용 2023. 6. 23. 17:22

소스 코드

def dfs(index, sum, target, numbers):
    
    if index == len(numbers):
        if sum == target:
            return 1
        else:
            return 0
    return dfs(index+1, sum + numbers[index], target, numbers) + dfs(index+1, sum - numbers[index], target, numbers)

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

print(solution([1,1,1,1,1], 3))

풀이

위 문제는 백준에서도 본적 있는거 같아서 쉽게 풀었던거 같다.

나올수 있는 정수의 형태는 더하거나 뺴기 두 가지 경우 밖에 없으므로 두 경우에 대한 과정을 dfs로 표현하면 됐다. 따라서 dfs 함수 내에서 해당 숫자를 더한 경우에 대한 함수 호출과 숫자를 뺀 경우에 대한 호출을 해준다.

 

탈출 조건으로는 target 넘버를 찾았을 경우 이거나 아니면 target 넘버가 아닌 경우 다시 돌아가기 위한 조건이다.