728x90
예상대로 시간초과가 나왔다. (1, 1)부터 (N, M)으로 가는 모든 경우의 수를 다 구해서 그 경우 벽을 몇 번 부수는지 count라는 리스트에 담아놓은 뒤에 최솟값을 출력하도록 했다.
예상대로 시간초과가 나왔다.
from sys import stdin
m, n = list(map(int, stdin.readline().split()))
li = []
for i in range(n):
li.append(stdin.readline())
import collections
q = collections.deque()
q.append((0, 0, 0))
visited = [[False] * m for i in range(n)]
count = []
while q:
cur = q.popleft()
if cur[0] == n - 1 and cur[1] == m - 1:
count.append(cur[2])
if cur[2] == 0:
break
continue
visited[cur[0]][cur[1]] = True
if cur[1] + 1 < m and not visited[cur[0]][cur[1] + 1]:
if li[cur[0]][cur[1] + 1] == '1':
q.append((cur[0], cur[1] + 1, cur[2] + 1))
else:
q.append((cur[0], cur[1] + 1, cur[2]))
if cur[1] - 1 >= 0 and not visited[cur[0]][cur[1] - 1]:
if li[cur[0]][cur[1] - 1] == '1':
q.append((cur[0], cur[1] - 1, cur[2] + 1))
else:
q.append((cur[0], cur[1] - 1, cur[2]))
if cur[0] + 1 < n and not visited[cur[0] + 1][cur[1]]:
if li[cur[0] + 1][cur[1]] == '1':
q.append((cur[0] + 1, cur[1], cur[2] + 1))
else:
q.append((cur[0] + 1, cur[1], cur[2]))
if cur[0] - 1 >= 0 and not visited[cur[0] - 1][cur[1]]:
if li[cur[0] - 1][cur[1]] == '1':
q.append((cur[0] - 1, cur[1], cur[2] + 1))
else:
q.append((cur[0] - 1, cur[1], cur[2]))
print(min(count))
728x90
'알고리즘 문제' 카테고리의 다른 글
[백준] 2443번 별 찍기 - 6 (0) | 2020.01.22 |
---|---|
[백준] 1463번 1로 만들기 (0) | 2020.01.21 |
[백준] 1475번 방 번호 (0) | 2020.01.20 |
[백준] 2747번 피보나치 수 (0) | 2020.01.20 |
[백준] 5622번 다이얼 (0) | 2020.01.20 |