본문 바로가기

CodingTest/Programmers

[ 프로그래머스 ] 게임 맵 최단거리

from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(a, b, visited, maps, n, m):
    global dx, dy
    q = deque([(a, b)])
    visited[a][b] = 1
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m:
                if maps[nx][ny] == 1 and not visited[nx][ny]:
                    visited[nx][ny] = visited[x][y] + 1
                    q.append((nx, ny))
    
def solution(maps):
    answer = -1
    visited = [[0]*len(maps) for _ in range(len(maps))]
    n = len(maps)
    m = len(maps[0])
    bfs(0, 0, visited, maps, n, m)
    
    for v in visited:
        print(v)
    if visited[n-1][m-1] != 0:
        return visited[n-1][m-1]
    else:
        return -1

정확성 2, 3, 6, 8, 9, 11, 13, 14, 17, 18 런타임에러, 나머지는 통과

효율성 2 런타임에러, 나머지는 통과

 

에러가 뭐길래...? ^^;;

 

아.. 문제를 대충 읽어서...

격자판이 가로 세로가 같다고 그냥 대충 뭉개서 인식하고 풀었다.. 다시 읽으니까 가로세로는 N과 M으로 나뉘며 서로 다를 수도 있다고..! 그거에 맞춰서 N과 M을 정의하고 각 길이에 맞게 visited배열을 수정해줬다.

 

from collections import deque
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(a, b, visited, maps, n, m):
    global dx, dy
    q = deque([(a, b)])
    visited[a][b] = 1
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < n and 0 <= ny < m:
                if maps[nx][ny] == 1 and not visited[nx][ny]:
                    visited[nx][ny] = visited[x][y] + 1
                    q.append((nx, ny))
    
def solution(maps):
    answer = -1
    visited = [[0]*len(maps[0]) for _ in range(len(maps))]
    n = len(maps)
    m = len(maps[0])
    bfs(0, 0, visited, maps, n, m)
    
    for v in visited:
        print(v)
    if visited[n-1][m-1] != 0:
        return visited[n-1][m-1]
    else:
        return -1

나이스 ~ ^^***