https://programmers.co.kr/learn/courses/30/lessons/43165
코딩테스트 연습 - 타겟 넘버
n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+
programmers.co.kr
◎ Code
def solution(numbers, target):
answer = 0
def back(result, point) :
if point == len(numbers) :
if result == target :
nonlocal answer
answer += 1
return
back(result + numbers[point], point + 1)
back(result - numbers[point], point + 1)
back(0, 0)
return answer
print(solution([1,1], -2))
print(solution([2,3,5,7,9], 2))
◎ Code 설명
- DFS (Depth-First-Search)
- numbers의 point(인덱스) 값마다 덧셈,뺄셈으로 누적한다
- 초기에 누적값 0, point(인덱스) 0을 호출한다
-> 초기누적값 0에 numbers의 0번째 값을 덧셈 / 뺄셈 (point 증가 = 인덱스 증가)
- 입력값 numbers배열의 point번째 숫자의 덧셈, 뺄셈을 누적하며 DFS 실행.
- point가 len(numbers)와 같을 때가 모든 숫자를 사용했을 경우 이므로
그때 누적된 값이 target과 같을 때는 answer + 1 and return, 아니면 그냥 return
'프로그래머스' 카테고리의 다른 글
프로그래머스_N으로 표현 (0) | 2021.09.16 |
---|---|
프로그래머스_여행경로 (0) | 2021.09.13 |
프로그래머스_카펫 (0) | 2021.09.13 |
프로그래머스_단어변환 (0) | 2021.09.10 |
프로그래머스_네트워크 (0) | 2021.09.10 |
댓글