자바스크립트랑 관련없는 질문 드려서 죄송합니다.
마땅히 질문할 곳이 생각나지 않아서 선생님에게 질문 드립니다.
선생님 제가 백준 2667번 문제를 풀다가 return을 쓰지 않을때와 썻을때의 궁금증이 생겨서 질문드립니다.
아래와 같은 파이썬 코드를 짯습니다.
n=int(input())
result=[]
array=[]
visited=[ [0]*n for _ in range(n)]
for i in range(n):
a=list(map(int,input()))
array.append(a)
cnt=0
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def dfs(array,x,y):
visited[x][y]=1
global cnt
if array[x][y]==1:
cnt+=1
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if nx>=0 and ny>=0 and nx<n and ny<n:
if array[nx][ny]==1 and visited[nx][ny]==0:
return dfs(array,nx,ny)
for i in range(n):
for j in range(len(array[0])):
if array[i][j]==1 and visited[i][j]==0:
dfs(array,i,j)
result.append(cnt)
cnt=0
for i in range(n):
for j in range(len(array[0])):
print(visited[i][j],end=" ")
print()
print(result)
여기서 result의 값이 [4, 3, 8, 7, 2] 로 나옵니다. 저는 잘 풀었다고 생각했는데 답이 나오질 않아 다른 사람들 코드를 찾아 봤습니다.
그랬더니 다들 return을 쓰지 않고 풀더 군요 그래서 저도 따라해봤습니다.
n=int(input())
result=[]
array=[]
visited=[ [0]*n for _ in range(n)]
for i in range(n):
a=list(map(int,input()))
array.append(a)
cnt=0
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def dfs(array,x,y):
visited[x][y]=1
global cnt
if array[x][y]==1:
cnt+=1
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if nx>=0 and ny>=0 and nx<n and ny<n:
if array[nx][ny]==1 and visited[nx][ny]==0:
dfs(array,nx,ny)
for i in range(n):
for j in range(len(array[0])):
if array[i][j]==1 and visited[i][j]==0:
dfs(array,i,j)
result.append(cnt)
cnt=0
for i in range(n):
for j in range(len(array[0])):
print(visited[i][j],end=" ")
print()
print(result) 이렇게 했더니 [7, 8, 9] 로 정답이 출력되더군요
저는 뭐가 다른지 모르겠습니다. 인터넷에 찾아봐도 이해가 되는 답변을 찾지 못했습니다.
설명해 주시면 감사하겠습니다.