numbers를 더하고 빼서 target number를 만드는 횟수를 return
자식 노드 생성후 dfs(깊이탐색)-> 재귀함수
def solution(numbers, target):
answer = 0
new = []
num = numbers.pop(0)
new.append(num)
new.append(-num)
for i in range(len(numbers)):
num = numbers.pop(0)
for i in range(len(new)):
new_num = new.pop(0)
new.append(new_num +num)
new.append(new_num -num)
return new.count(target)
def solution(numbers, target):
answer = 0
length = len(numbers)
def loop(idx=0):
if idx< length:
numbers[idx]*=1
loop(idx+1) #자식노드 만들기
numbers[idx]*=-1
loop(idx+1) #자식노드 만들기
elif sum(numbers) == target:
nonlocal answer
answer+=1
loop()
return answer
class Solution {
static int answer = 0;
public int solution(int[] numbers, int target) {
loop(numbers,target,0,0);
return answer;
}
static void loop(int[] numbers, int target, int idx, int sum){
if (idx<numbers.length){
loop(numbers,target,idx +1,sum+numbers[idx]);
loop(numbers,target,idx +1,sum-numbers[idx]);
}
else if (sum == target){
answer ++;
}
}
}
global이나 nonlocal과 같은 전역변수 설정이 없어서 함수마다 매개변수를 매번 지정해줘야 한다 but 이를 이용해서 재귀 함수를 매우 간단히 표현할 수 있다.
public static int solution(numbers,target){}
/*return 값 필요*/
public static void solution(numbers,target){}
/*void: return값 필요 없음*/