관리 메뉴

JIE0025

[BFS][lv.2] 게임 맵 최단거리 - 파이썬(Python) 본문

알고리즘/프로그래머스

[BFS][lv.2] 게임 맵 최단거리 - 파이썬(Python)

Kangjieun11 2023. 1. 23. 15:46
728x90

 

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

코딩테스트 파이썬으로 공부 안한지 또 오래돼서 문법적으로 기억안나는게 생각보다 있다... 

리스트의 길이를 구할 때 len()을 써야하는데, size()나 length를 쓰려고 한다던지 ㅠㅠ

 

문법을 다시 기억하고 익숙하게 만들려면 앞으로도 계속 바로바로 프로그래머스에서 푸는걸 연습해야겠다.

 

 

 

 

도달하지 못할경우 -1을 출력해야하므로 visited를 -1로 초기화, 

처음 위치를 1로 초기화하고 이동할때마다 최단거리를 1씩 증가시켜주면 

마지막에 visited[n-1][m-1]을 리턴해주기만 하면 된다

 

 

💻 내가 쓴 정답 코드

from collections import deque

def solution(maps):
    
    d = [[1,0],[0,1],[-1,0],[0,-1]]

    n, m = len(maps), len(maps[0])
    visited = [[-1]*m for _ in range(n)]
    
    queue = deque()
    queue.append([0,0])
    visited[0][0] = 1
    
    while(queue):
        r,c = queue.popleft()
        
        for i in range(4):
            dr = r+d[i][0]
            dc = c+d[i][1]
            
            if(0<=dr<n and 0<=dc<m and visited[dr][dc] == -1 and maps[dr][dc] == 1):
                queue.append([dr,dc])
                visited[dr][dc] = visited[r][c] + 1
                
    return visited[n-1][m-1]