Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 삼성코테기출
- 삼성빈출
- mcp튜토리얼
- Python
- mcp란
- 20922
- mcp사용법
- 시뮬레이션
- DP
- 그리디
- 수학
- 시계토끼제니쌤
- 너비우선탐색
- 구현
- 그리디알고리즘
- 미지의 공간탈출
- 코테
- 토스유튜브
- 토익스피킹
- 3dgs
- 20006
- 28215
- 토스독학
- 그래프
- BFS
- 백준
- 그래프탐색
- 최단거리추적
- 토스
- 토스만능문장
Archives
- Today
- Total
Victory in my life
Baekjoon 14940 | 쉬운 최단거리 (Python) 본문
📌문제
SILVER1 / bfs / 그래프이론 / 그래프탐색
https://solved.ac/contribute/14940
📌문제 분석 및 설계
제목 그대로 쉬운 최단거리 구하는 문제이다.
보자마자 뭐야 쉽네 하고 걍 bfs여러번돌렸다가 시간초과나와서
아? 하고 생각하니 걍 도착지점에서 모든 distance를 구하면 되는 거였다.
다 푼 후에 코드를 정리하려고 보니,
원래는 2인 지점을 따로 반복문에 넣고 찾은후에 bfs돌리고 도달할 수 없는 위치 처리해줬는데 불필요한 반복이라
우선 이중 반복문을 통해 위에 말한 처리들을 한번에 해주고 그 후에 bfs가 돌아가도록 했다
📌소스 코드
from collections import deque
n,m=map(int,input().split())
grid=[list(map(int,input().split())) for _ in range(n)]
dxs,dys=[-1,0,1,0],[0,1,0,-1]
def can_go(x,y):
return 0<=x<n and 0<=y<m and grid[x][y]!=0
def bfs(startx,starty):
q=deque([(startx,starty)])
distance[startx][starty]=0
while q:
x,y=q.popleft()
for dx,dy in zip(dxs,dys):
nx,ny=x+dx,y+dy
if can_go(nx,ny) and distance[nx][ny]==-1:
distance[nx][ny]=distance[x][y]+1
q.append((nx,ny))
return distance
distance=[[-1]*m for _ in range(n)]
for i in range(n):
for j in range(m):
if grid[i][j]==1 and distance[i][j]==-1:
distance[i][j]=-1
elif grid[i][j]==0:
distance[i][j]=0
elif grid[i][j]==2:
endx,endy=i,j
result= bfs(endx,endy)
for row in result:
print(*row)
'CodingTest > Baekjoon' 카테고리의 다른 글
Baekjoon 11724 | 연결요소의 개수 (Python) (0) | 2025.02.26 |
---|---|
Baekjoon 1343 | 폴리오미노 (Python) (0) | 2025.02.26 |
Baekjoon 2178 | 미로 탐색(Python) (0) | 2025.02.25 |
Baekjoon 1138 | 한 줄로 서기(Python) (0) | 2025.02.25 |
Baekjoon 20006 | 랭킹전 대기열(Python) (0) | 2025.02.24 |