알고리즘 공부 ⌨/프로그래머스

[프로그래머스 Level 2] 게임 맵 최단거리 Python3 / JavaScript

고짬이 2021. 7. 7. 00:01

문제 주소 및 출처 ❕

https://programmers.co.kr/learn/courses/30/lessons/1844

 

코딩테스트 연습 - 게임 맵 최단거리

[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1

programmers.co.kr

 

 

문제 : Level 2 게임 맵 최단거리

 

언어 : Python3 / JavaScript

 

 

 

😥 정사각형 맵으로 생각해서 계속 틀린 문제,, 문제를 잘 읽읍시다❣

 

💬 나의 코드

📌 Python3

def solution(maps):
    n = len(maps)
    m = len(maps[0])
    check = [[0]*m for _ in range(n)]
    queue = [(0, 0)]
    check[0][0] = 1
    # 상 하 좌 우
    dr = [-1, 1, 0, 0]
    dc = [0, 0, -1, 1]
    
    while queue:
        v = queue.pop(0)
        r = v[0]
        c = v[1]
        for i in range(4):
            new_r = r + dr[i]
            new_c = c + dc[i]
            if 0 <= new_r < n and 0 <= new_c < m and maps[new_r][new_c] and check[new_r][new_c] == 0:
                queue.append((new_r, new_c))
                check[new_r][new_c] = check[r][c] + 1
    if check[n-1][m-1]:
        answer = check[n-1][m-1]
    else:
        answer = -1
    return answer

 

📌 JavaScript

function solution(maps) {
  var answer = -1
  const n = maps.length
  const m = maps[0].length
  var check = new Array(n)
  for (let i=0; i<n; i++) {
    check[i] = new Array(m)
    for (let j=0; j<m; j++) {
      check[i][j] = 0
    }
  }
  var queue = [[0, 0]]
  check[0][0] = 1
  var dr = [-1, 1, 0, 0]
  var dc = [0, 0, -1, 1]

  while (queue.length > 0) {
    var v = queue.shift()
    var r = v[0]
    var c = v[1]
    for (let i=0; i<4; i++) {
      var new_r = r + dr[i]
      var new_c = c + dc[i]

      if (0 <= new_r && new_r < n && 0 <= new_c && new_c < m) {
        if (maps[new_r][new_c] === 1 && check[new_r][new_c] === 0) {
          queue.push([new_r, new_c])
          check[new_r][new_c] = check[r][c] + 1
        }        
      }
    }
  }

  if (check[n-1][m-1]) {
    answer = check[n-1][m-1]
  }
  return answer;
}