프로그래머스 | 경주로 건설

커몽·2021년 6월 30일
0

프로그래머스 level3

목록 보기
17/17

방향을 잡아주는 부분이 새롭다

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];
}

0개의 댓글