BFS 아주 기초 문제 인거 같다..
근데도 두시간 반이나 했는데 대충 느낌은 오는데 확실하게 못풀겠어서
유투브의 영상을 보고 참고해서 완성함
이걸 풀고 나니 느낌은 어느 정도 오긴한다.. 뭔가 틀이 있는거 같은 기분임
from collections import deque
import sys
def check(x, y):
if x < 0 or y < 0 or x >= N or y >= M:
return False
if mapData[x][y] == 1:
return True
else:
return False
N, M = map(int, sys.stdin.readline().split())
mapData = [[0]*M for _ in range(N)]
for i in range(N):
temp = sys.stdin.readline()
for j in range(M):
mapData[i][j] = int(temp[j])
counter = 0
visited = [[False for _ in range(M)] for _ in range(N)]
# init
qx = deque([0])
qy = deque([0])
qc = deque([1])
while qx:
x = qx.popleft()
y = qy.popleft()
c = qc.popleft()
if visited[x][y] == True:
continue
visited[x][y] = True
if x == N - 1 and y == M -1:
counter = c
break
# 상
if check(x - 1, y):
qx.append(x - 1)
qy.append(y)
qc.append(c + 1)
# 하
if check(x + 1, y):
qx.append(x + 1)
qy.append(y)
qc.append(c + 1)
# 좌
if check(x, y - 1):
qx.append(x)
qy.append(y - 1)
qc.append(c + 1)
# 우
if check(x, y + 1):
qx.append(x)
qy.append(y + 1)
qc.append(c + 1)
print(counter)
'Algorithm > BFS, DFS' 카테고리의 다른 글
[백준] 2675 문자열 반복 (0) | 2020.09.04 |
---|---|
[백준] 1260번 DFS와 BFS (0) | 2020.09.04 |
[프로그래머스] 정수 내림차순으로 배치하기 (0) | 2020.08.28 |
[프로그래머스] 문자열을 정수로 바꾸기 (0) | 2020.08.28 |
[프로그래머스] 문자열 다루기 기본 (0) | 2020.08.28 |
댓글