전공/백준
2178
yha97
2022. 10. 25. 17:29
날짜 : 2022. 10. 25
사용 언어 : python
문제
코드
import sys
from collections import deque
def bfs():
# 상하좌우 탐색
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
q.append([0, 0]) # 시작점, 이동거리
while q:
node = q.popleft()
#print(node)
for i in range(4):
# 이중 for문 사용 -> 순환과정 주의
x = node[0] + dx[i]
y = node[1] + dy[i]
if x not in range(n) or y not in range(m): # 범위이탈
continue
if graph[x][y] == 0: # 벽에 부딫힌 경우
continue
if graph[x][y] == 1:
q.append([x, y])
graph[x][y] = graph[node[0]][node[1]] + 1 # 방문처리
#print(graph)
print(graph[n-1][m-1])
n, m = map(int, sys.stdin.readline().split())
graph = [[] for i in range(n)]
q = deque()
for i in range(n):
tmp = (sys.stdin.readline().strip())
for j in range(len(tmp)):
graph[i].append(int(tmp[j]))
#print(graph)
bfs()
알게된 점
- BFS를 활용해서 풀이하는 문제였다.
- 탐색과정에서 그래프의 방문처리와 dx, dy에서의 반복조건을 제대로 하지 않아 많은 시간을 할애하게 만들었다.
- 단순 방문했을 때 1을 0으로 만들어 다시 갈 수 없게 했지만 네 번째 예시에서 계속 값이 14가 나왔다. 방문횟수를 최소로 해야 했기 때문에 이를 해결하려고 고민했고 그래프가 1인 경우에만 방문해서 값을 변경한다는 조건을 추가했다.
- 기본적인 원리는 맞았지만 유려하게 할 수 없어서 아직 많이 아쉽다.
- 많이 문제를 풀어봐야겠다.
참고 사이트
-