그래프(DFS) - 타겟 넘버

지속가능한개발·2023년 2월 24일
0

알고리즘

목록 보기
2/4
post-custom-banner

1.문제

2.소스

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

def DFS(numbers, target, depth):
    answer = 0
    if depth == len(numbers):
        print(numbers)
        if sum(numbers) == target:
            return 1
        else: return 0
    else:
        answer += DFS(numbers, target, depth+1)
        numbers[depth] *= -1
        answer += DFS(numbers, target, depth+1)
        return answer

3.문제분석

DFS는 깊이우선탐색인데 먼저 왼쪽노드로 가장깊은 끝까지 갔다가
되돌아오면서 깊은곳 우선으로 탐색하는 방법이다

1)DFS 함수 분석
매개변수가 세개 들어있는데
첫번째 매개변수는 dfs의 각 노드의 재료가되는 원본배열이다
두번째 매개변수는 목표숫자로 DFS의 종료조건이 된다
세번째 매개변수는 깊이인데 각 배열에 들어있는 숫자의 인덱스가 되고
배열의 길이와 같아지면 DFS함수의 종료조건이 된다

2)종료조건
어떤상황에서 종료할지 정하는것은 어렵다
DFS함수가 종료되는 조건은
이 문제에 나와있는것 처럼 더하거나 빼서 목표숫자가 되었을때이다
또한 주어진 숫자를 모두 사용하여 깊이가 주어진 숫자의 배열과 같을때로 주면 된다

3)더하고 빼는 방법
깊이우선탐색을 하면서 왼쪽노드는 더하고 오른쪽노드는 뺀다

4.하고싶은말

profile
좋은 프로그램을 만들 수 있는 사람이 되기 위해 꾸준히 노력합니다
post-custom-banner

0개의 댓글