n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다.
1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3
사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타겟 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요.
numbers | target | return |
---|---|---|
[1, 1, 1, 1, 1] | 3 | 5 |
문제에 나온 예와 같습니다.
#BFS 풀이
def solution(numbers, target):
answer = 0
leaves = [0]
for num in numbers:
tmp = []
for parent in leaves:
tmp.append(parent + num)
tmp.append(parent - num)
leaves = tmp
for leaf in leaves:
if leaf == target:
answer += 1
return answer
#DFS 풀이
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
global
을 빼고 작성하고 싶었다. 이 때 스스로 코드를 재귀적으로 작성하는 것에 익숙하지 않다보니 머릿속에서 정리가 되지 않았다.
안녕하세요 도움되는 포스팅 너무 감사합니다!
혹시 BFS 풀이에서 leaves=[0] 인 이유를 알 수 있을까요?!