본문 바로가기
프로그래밍/알고리즘 & 자료구조

[프로그래머스] 게임 맵 최단거리 with 파이썬 : BFS

by Play_With 2024. 1. 25.
반응형

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

 

프로그래머스

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

programmers.co.kr

# 포인트

1. 단순히 cnt+=1로 카운팅하게되면, bfs에서 들리는 모든 빈칸을 체크하게 되므로, maps[ny][nx]로 좌표를 제한하면서 기록한다.

2. 도착점이 1인 경우에는 방문하지 않은 것이기 때문에 retrun -1

from collections import deque
def solution(maps):
    n=len(maps)
    m=len(maps[0])
    v=[[0]*m for _ in range(n)]
    q=deque([(0,0)])
    v[0][0]=1
    
    dy=[-1, 0, 1, 0]
    dx=[0, 1, 0, -1]
    while q:
        y, x=q.popleft()
        for i in range(4):
            ny=y+dy[i]
            nx=x+dx[i]
            if 0 <= ny < n and 0 <= nx <m:
                if not v[ny][nx] and maps[ny][nx]==1:
                    v[ny][nx]=1
                    q.append((ny, nx))
                    
                    # 이 부분에서 cnt+=1일 경우, 빈칸을 카운팅하게 되므로, 
                    #구체적 좌표인 [ny][nx]를 주어 최단경로만 체크
                    maps[ny][nx]=maps[y][x]+1
                    
    
    if maps[n-1][m-1]==1:
        return -1
    else : return maps[n-1][m-1]
반응형

댓글