알고리즘
bfs, dfs 함수에서 (y,x)로 받아주는 이유
물고기고기
2023. 11. 14. 01:59
def dfs(y, x):
global each
each += 1
for k in range(4):
ny = y + dy[k]
nx = x + dx[k]
if 0<=ny<N and 0<=nx<N:
if map[ny][nx] == 1 and chk[ny][nx] == False:
chk[ny][nx] = True
dfs(ny, nx)
for j in range(N):
for i in range(N):
if map[j][i] == 1 and chk[j][i] == False:
chk[j][i] = True
each = 0
dfs(j,i)
result.append(each)
Q. 이러한 dfs알고리즘 구현 코드가 있다고 칠때 이때 dfs에서 (y,x)로 받아주잖아 그런데 이걸 (x,y)로 받아주면안되는거야? 왜 y부터 받아주는거야?
A. dfs 함수에서 (y, x)로 받아주는 이유는 보통 행(row)을 먼저 처리하고 열(column)을 나중에 처리하는 방식을 따르기 때문입니다. 이 방식은 대부분의 프로그래밍 언어에서 행 우선 순회(row-major order)를 따르는 관행입니다.
행(row)은 보통 수직 방향으로 이동하고, 열(column)은 수평 방향으로 이동하기 때문에 좌표를 (y, x)로 받아들이는 것이 직관적입니다. 이렇게 하면 코드가 좀 더 이해하기 쉬워집니다.
또한, 다른 프로그래머와 협업할 때 행과 열을 헷갈리지 않도록 하기 위해 일반적으로 이러한 관행을 따릅니다. 따라서 (y, x) 순서로 좌표를 받아들이는 것이 좋은 습관입니다.
참조
https://github.com/ChangguHan/codingtestbasic/blob/master/BJ2667.py