https://school.programmers.co.kr/learn/courses/30/lessons/43165
약 10분
dfs 함수를 만들어서 재귀호출 방식으로 풀이했다.
현재까지의 합에 더하는경우, 빼는 경우 두가지를 재귀호출한다.
numbers를 모두 순회했다면 현재까지의 합이 target과 같은지 비교하고, 같다면 answer에 1을 더해줬다.
def solution(numbers, target):
answer = 0
def dfs(idx, sum):
nonlocal answer
if idx == len(numbers):
if sum == target:
answer += 1
return
dfs(idx+1, sum+numbers[idx])
dfs(idx+1, sum-numbers[idx])
dfs(0,0)
return answer
dfs 함수 내부에서 상위 solution 함수에 선언된 answer 변수를 사용하려고 하니 오류가 났다.
그래서 dfs 함수에서 answer 변수는 local이 아니다, 라고 nonlocal 로 선언해주니 오류가 사라졌다.
def test():
a = 3
def sum():
nonlocal a
a = 7
return True
sum()
return a
result = test()
print(result)
c = 11
def test():
a = 3
b = 9
def sum():
nonlocal a
global b
a = 7 # nonlocal 변수는 상위 변수의 접근 O
b = 11 # global 변수는 중첩함수내에서 상위 함수의 변수는 접근 X
global c
c = 13 # global 변수는 함수 외부의 변수는 접근 가능
return True
sum()
return a, b, c
result = test()
print(result) # (7, 9, 13) 출력