알고리즘 공부 ⌨/프로그래머스
[프로그래머스 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;
}