n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
문제 분류 대로 DFS/BFS를 이용하면 쉽게 풀이할 수 있다.
코드가 짧은 만큼 코드를 별다른 설명없이도 코드를 보면 이해할 수 있을것이다.
answer = 0
def solution(numbers, target):
def add(index, number):
global answer
if index > 0:
add(index - 1, number + numbers[index - 1])
add(index - 1, number - numbers[index - 1])
else:
if number == target:
answer += 1
add(len(numbers), 0)
return answer
DFS를 이용한 풀이다.
numbers의 맨 마지막 숫자부터 차례대로 더한 경우, 뺀 경우를 하나하나 경우의 수를 함수를 호출해 추가해 나간다. 그리고 마지막 수(numbers의 첫번째 수)를 더했을때, 뺏을때 타겟 넘버와 같다면 방법의 수(answer)를 하나 추가한다.