python-for-coding-test icon indicating copy to clipboard operation
python-for-coding-test copied to clipboard

13DFS/BFS 19 연산자 끼워넣기 질문이 있습니다.

Open pumphelp opened this issue 5 years ago • 1 comments

안녕하세요. 책이랑 강의 잘 보고 있습니다. 학습하던중에 질문이 있어서 글 남깁니다.

해답으로 올려주신 연산자끼워넣기 코드가 다음과 같은데요

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 avatar Sep 30 '20 14:09 pumphelp

안녕하세요, @pumphelp 님!

좋은 질문 감사합니다.

파이썬에서는 함수 안에서 전역 변수의 값이 바뀔 수 있을 때 글로벌(global) 키워드를 넣습니다.

해당 코드에서 min_value, max_value, add, sub, mul, div 변수는 dfs() 함수 안에서 값을 대입하는 구문이 존재하므로, 글로벌 키워드를 넣어 줄 필요가 있습니다.

다만 변수 n은 값을 비교할 때만 사용되기 때문에 global 키워드를 넣어주는 것은 불필요합니다. (넣어준다고 해도 결과는 동일합니다.)

감사합니다. 나동빈 드림

ndb796 avatar Oct 24 '20 07:10 ndb796