코딩테스트
[파이썬(python)] 이것이 취업을 위한 코딩테스트다 음료수 얼려먹기
고후
2022. 3. 1. 12:29
아직 dfs를 잘 모르는것 같아 dfs 예제를 풀어봤다.
n, m = map(int, input().split())
ice = []
for i in range(n):
ice.append(list(map(int,input())))
count = 0
def dfs(i, j):
if i < 0 or i >= n or j < 0 or j >= m:
return False
if ice[i][j] == 1:
return False
ice[i][j] = 1
dfs(i+1, j)
dfs(i, j+1)
dfs(i-1, j)
dfs(i, j-1)
return True
for i in range(n):
for j in range(m):
if dfs(i, j) == True:
count += 1
print(count)
그런데 내가 이해가 안갔던 포인트 하나.
범위를 벗어나거나, 얼음이 아닌경우 false를 리턴하게 되는데..
그러면 dfs를 다 끝내기도 전에 false가 먼저 리턴돼서 count가 증가할 수 없는 것 아닌가???
다시말하면 if dfs(i, j) == True 라는 문장을 실행할 떄 dfs의 가장 마지막에 True가 리턴되는데
그전에 재귀로 호출된 dfs가 먼저 False를 리턴하면....
뭐지? 어떻게 되는거지? 를 계속 고민했다..
그런데 다시생각해보니 재귀로 호출된 dfs는
dfs(i+1, j)
dfs(i, j+1)
dfs(i-1, j)
dfs(i, j-1)
이것인데.. False를 if dfs(i, j) == True로 리턴하지 않는다. 호출된 코드로 리턴되겟지.. 근데 그 호출된 코드는 리턴값을 저장하지 않으니까 그냥 넘겨지는것이다^^...
별것을 다 고민함