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

백준 1261 : 알고스팟 with 파이썬

by Play_With 2024. 1. 26.
반응형

https://www.acmicpc.net/problem/1261

 

1261번: 알고스팟

첫째 줄에 미로의 크기를 나타내는 가로 크기 M, 세로 크기 N (1 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 미로의 상태를 나타내는 숫자 0과 1이 주어진다. 0은 빈 방을 의미하고, 1은 벽을 의미

www.acmicpc.net

 

# 포인트

1. v=[[-1]*가로 for _ in range(세로)] 방문처리하는 리스트의 기본값을 -1로 놓고, 

방문하지 않았을때는 -1, 방문해서 벽을 뚫지 않으면 +0, 벽을 뚫으면 +1 로 한번에 체크해주기

 

2. 벽을 부술 필요가 없을 경우, q.appendleft()해주어 먼저 탐색할 수 있도록

from collections import deque

m,n=map(int, input().split())
map=[list(map(int, input().strip())) for _ in range(n) ]
v=[[-1]*m for _ in range(n)]
q=deque([(0,0)])
v[0][0]=0

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 and v[ny][nx]==-1:
            if map[ny][nx]==0:
                q.appendleft((ny, nx))
                v[ny][nx]=v[y][x]
            else :
                q.append((ny, nx))
                v[ny][nx]=v[y][x]+1

print(v[n-1][m-1])
반응형

댓글