알고리즘
프로그래머스(programmers) 타겟 넘버 python 정답[DFS 풀이]
TheSapper
2023. 2. 7. 03:26
반응형
프로그래머스(programmers) 타겟 넘버 python 정답[DFS 풀이]
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43165
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 정답
def solution(numbers, target):
return recur(numbers,target)
def recur(numbers,target):
if len(numbers) == 0 and target == 0 : return 1
if len(numbers) == 0 and target != 0 : return 0
return recur(numbers[:-1],target-numbers[-1]) + recur(numbers[:-1],target+numbers[-1])
문제 해설
dfs(재귀)를 이용한다
- target에 number의 마지막 요소를 더한 뒤, 배열을 조정하고 재귀 함수를 호출한다.
- target에 number의 마지막 요소를 뺀 뒤, 배열을 조정하고 재귀 함수를 호출한다.
각 노드는 양 쪽이 다 target을 만드는 데 성공하면 2, 하나만 만들면 1, 하나도 못만들면 0을 리턴하며,
구조적으로 바이너리 트리와 유사하게 된다.
따라서 시간복잡도는 2^n가 될 것이다.
(물론 총 함수의 호출 수는 등비급수가 될 테지만...)
반응형