최근 자바스크립트로 알고리즘 문제를 풀던중 graph 탐색 문제에서 이상한 점을 발견했다.
평상시 4방향 문제 알고리즘을 해결할때 파이썬으로 다음과 같이 해결했다.
dx = [-1,1,0,0]
dy = [0,0,-1,1]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0<= nx < w and 0<= ny < h):
dfs(nx, ny)
자바스크립트로 graph를 처음 풀어봐 파이썬과 동일하도록 이렇게 구현했었다.
const dx = [-1,1,0,0]
const dy = [0,0,-1,1]
for(let i =0; i<4; i++){
nx = x + dx[i]
ny = y + dy[i]
}
if (0<= nx < w && 0<= ny < h){
dfs(nx, ny)
}
(0<= nx < w && 0<= ny < h)
이부분에서 파이썬과 동일하게 동작하지 않아 이유를 찾아보니..
자바스크립트에서는 비교 연산자인 "<"를 연속해서 사용하여 여러 개의 비교식을 연결할 수 없다고 한다.
결국 "0 <= nx < w && 0 <= ny < h"와 같은 표현은 자바스크립트에서 예상한 대로 동작하지 않는다.
if (0<= nx && nx < w && 0<= ny && ny < h){
dfs(nx, ny)
}
따라서 다음과 같이 사용해야 한다.