본문 바로가기

프로그래밍

벽 부수고 이동하기[파이썬, JAVA, C++]

# 파이썬

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from collections import deque
n,m=map(int,input().split())
S=[list(map(int,[*input()])) for k in range(n)]
D= [[[-1]*2 for j in range(m)] for i in range(n)]
D[0][0][0]=1
q=deque()
q.append((0,0,0))
dx,dy=[0,0,1,-1],[1,-1,0,0]
while q:
    x,y,z=q.popleft()
    for i in range(4):
        nx,ny=x+dx[i],y+dy[i]
        if 0<=nx<and 0<=ny<m:
            if S[nx][ny]==0 and D[nx][ny][z]==-1:
                D[nx][ny][z]=D[x][y][z]+1
                q.append((nx,ny,z))
            if z==0 and S[nx][ny]==1 and D[nx][ny][z+1]==-1:
                D[nx][ny][z+1]=D[x][y][z]+1
                q.append((nx,ny,z+1))
if D[n-1][m-1][0]==-1:print(D[n-1][m-1][1])
elif D[n-1][m-1][1]==-1:print(D[n-1][m-1][0])
else:print(min(D[n-1][m-1]))
 
 
 

 

# 자바

 

# C++

'프로그래밍' 카테고리의 다른 글

파이썬 명령어 받기 (Parser)  (0) 2020.04.13
UML Overview  (0) 2020.03.31
Permutation [Python, Java, C++]  (0) 2020.03.28
[백준 1149 RGB 거리 ] 파이썬 풀이  (0) 2020.02.28
[백준 1697 숨바꼭질 ] 파이썬  (0) 2020.02.27