(1,1)
으로 나와있지만 (0,0)
으로 생각하는게 이해하기 편했고 N, M
도 마찬가지로 N-1, M-1
로 생각했다1
이면 접근 가능 0
이면 접근 불가능하다는 것 그리고 N, M
은 도착점이 우측 하단의 끝이 아닐수도 있다는 점을 생각하였다const fs = require('fs');
const input = fs.readFileSync('example.txt', 'utf-8').trim().split('\n');
const [N, M] = input.shift().split(' ');
const graph = input.map((el) => el.split('').map((el2) => +el2));
const dirs = [
[-1, 0],
[1, 0],
[0, -1],
[0, 1],
];
const visited = Array.from({ length: graph.length }, () =>
Array.from({ length: graph[0].length }, () => false)
);
const cntGraph = Array.from({ length: graph.length }, () =>
Array.from({ length: graph[0].length }, () => 0)
);
const bfs = (x, y) => {
const queue = [];
queue.push([x, y]);
visited[x][y] = true;
cntGraph[x][y] += 1;
while (queue.length !== 0) {
const [curX, curY] = queue.shift();
for (const dir of dirs) {
const [nextX, nextY] = [curX + dir[0], curY + dir[1]];
if (
nextX >= 0 &&
nextY >= 0 &&
nextX < graph.length &&
nextY < graph[0].length &&
visited[nextX][nextY] === false &&
graph[nextX][nextY] === 1
) {
visited[nextX][nextY] = true;
queue.push([nextX, nextY]);
cntGraph[nextX][nextY] = cntGraph[curX][curY] + 1;
}
}
}
};
bfs(0, 0);
console.log(cntGraph[N - 1][M - 1]);
cntGraph[nextX][nextY] = cntGraph[curX][curY] + 1;
이 부분에서 이전 좌표를 가져와서 거기에 1씩 더해주는 모습이라고 볼 수 있겠다프로젝트 핑계로 알고리즘에 소홀했고 BFS를 어느정도 다룰줄 알게 되었다고 다른 알고리즘에 눈을 돌렸는데 ..
사실 BFS도 좀만 조건이 추가된다면 엣지케이스 예상이 어려워지기도 하고 조건 먹이는것도 어려워서 잘못한다 그러니까 조금이라도 할 줄 아는걸 더 갈고닦고 가보자
풀이 시간 1시간