백준/ Silver 1 문제 , 백준 파이썬 14940 , 쉬운 최단거리 [BFS]
Check Point ! ( 해당사항 ✓체크 )
1. 막힘 없이 수월하게 풀린 문제인가?
2. 1시간이내로 풀렸던 문제인가?
3. 1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
4. 시간을 써도 도무지 풀 수 없는 문제인가?
5. 솔루션을 찾아봤는가?
-------------------------------------------------------------------------------------------
난이도 체감
1. 최상
2. 상
3. 중
4. 하
<이해도>
1. 완벽히 이해
2. 다소 헷갈리는 부분들이 있음
3. 이해 못함
<덧붙일 말>
범위를 코드에 잘못적어서 찾느라 애먹었다 ㅡ,ㅡ
이제 실버1 문제는 경험치 오르지도 않음...
문제 출처
https://www.acmicpc.net/problem/14940
정답
from collections import deque
import sys
input=sys.stdin.readline
dr=[(0,1),(1,0),(-1,0),(0,-1)]
def bfs(start,MAP):
MAP[start[0]][start[1]]=0
dq=deque()
dq.append(start)
visited=[[False for _ in range(M)] for _ in range(N)]
visited[start[0]][start[1]]=True
while dq:
X,Y=dq.popleft()
for i,j in dr:
mx,my=X+i,Y+j
if 0<=mx<N and 0<=my<M:
if not visited[mx][my] and MAP[mx][my]==1:
visited[mx][my]=True
MAP[mx][my]=MAP[X][Y]+1
dq.append([mx,my])
for i in range(N):
for j in range(M):
if visited[i][j]==False and MAP[i][j]!=0:
MAP[i][j]=-1
return MAP
N,M=map(int,input().split())
MAP=[]
start=[]
for i in range(N):
MAP.append(list(map(int,input().split())))
for j in range(M):
if MAP[i][j]==2:
start=[i,j]
result=bfs(start,MAP)
for i in range(N):
print(*MAP[i])
반응형
'알고리즘 공부 > 백준 - 파이썬' 카테고리의 다른 글
백준/ Gold 4 문제 , 백준 파이썬 14938 , 서강그라운드 [다익스트라 알고리즘] (0) | 2022.08.29 |
---|---|
백준/ Gold 4 문제 , 백준 파이썬 4485 , 녹색 옷 입은 애가 젤다지? [다익스트라 알고리즘] (0) | 2022.08.29 |
백준/ Gold 2 문제 , 백준 파이썬 23743 , 방탈출 [최소 스패닝 트리, 프림 알고리즘] (0) | 2022.08.24 |
백준/ Gold 2 문제 , 백준 파이썬 9344 , 도로 [최소 스패닝 트리, 프림 알고리즘] (0) | 2022.08.24 |
백준/ Gold 2 문제 , 백준 파이썬 10423 , 전기가 부족해 [최소 스패닝 트리, 프림 알고리즘] (0) | 2022.08.24 |