방향을 잡아주는 부분이 새롭다
function solution(board) {
let dx = [1, 0, -1, 0];//RDLU
let dy = [0, 1, 0, -1];
let len = board.length;
const visited = new Array(len).fill(0).map(e => e = new Array(len).fill(0));
let queue = [[0, 0, 'RL', 0]];
while (queue.length) {
let [x, y, dir, cost] = queue.shift();
for (let i = 0; i < 4; i++) {
let nx = x + dx[i];
let ny = y + dy[i];
if (nx < 0 || nx >= len || ny < 0 || ny >= len || board[nx][ny] === 1) continue;
let d = i % 2 === 0 ? 'RL' : 'UD';
let toAddCost = (x === 0 && y === 0) || dir === d ? 100 : 600;
if (visited[nx][ny] === 0 || visited[nx][ny] >= cost + toAddCost) {
visited[nx][ny] = cost + toAddCost;
queue.push([nx, ny, d, visited[nx][ny]]);
}
}
}
return visited[len - 1][len - 1];
}