13DFS/BFS 19 연산자 끼워넣기 질문이 있습니다.
안녕하세요. 책이랑 강의 잘 보고 있습니다. 학습하던중에 질문이 있어서 글 남깁니다.
해답으로 올려주신 연산자끼워넣기 코드가 다음과 같은데요
n = int(input()) data = list(map(int, input().split()))
add, sub, mul, div = map(int, input().split())
min_value = 1e9 max_value = -1e9
def dfs(i, now):
global min_value, max_value, add, sub, mul, div
n 은 전역변수선언안함
if i == n:
min_value = min(min_value, now)
max_value = max(max_value, now)
else:
if add > 0:
add -= 1
dfs(i + 1, now + data[i])
add += 1
if sub > 0:
sub -= 1
dfs(i + 1, now - data[i])
sub += 1
if mul > 0:
mul -= 1
dfs(i + 1, now * data[i])
mul += 1
if div > 0:
div -= 1
dfs(i + 1, int(now / data[i]))
div += 1
dfs(1, data[0])
print(max_value) print(min_value)
이렇게 되어있는데 함수문 안에 보면 global min_value, max_value, add, sub, mul, div 이렇게 해서 함수밖에 선언한 변수들을 다 가지고 왓는데요 n만 빠져있습니다. 근데 n 이빠졌는데도 함수가 제대로 실행되는 이유가 무엇인가요? global n 으로 변수 선언하나 마나 차이가 없던데 이유가 궁금합니다
안녕하세요, @pumphelp 님!
좋은 질문 감사합니다.
파이썬에서는 함수 안에서 전역 변수의 값이 바뀔 수 있을 때 글로벌(global) 키워드를 넣습니다.
해당 코드에서 min_value, max_value, add, sub, mul, div 변수는 dfs() 함수 안에서 값을 대입하는 구문이 존재하므로, 글로벌 키워드를 넣어 줄 필요가 있습니다.
다만 변수 n은 값을 비교할 때만 사용되기 때문에 global 키워드를 넣어주는 것은 불필요합니다. (넣어준다고 해도 결과는 동일합니다.)
감사합니다. 나동빈 드림