728x90
https://www.acmicpc.net/problem/7576
7576๋ฒ: ํ ๋งํ
์ฒซ ์ค์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๋ ์ ์ M,N์ด ์ฃผ์ด์ง๋ค. M์ ์์์ ๊ฐ๋ก ์นธ์ ์, N์ ์์์ ์ธ๋ก ์นธ์ ์๋ฅผ ๋ํ๋ธ๋ค. ๋จ, 2 ≤ M,N ≤ 1,000 ์ด๋ค. ๋์งธ ์ค๋ถํฐ๋ ํ๋์ ์์์ ์ ์ฅ๋ ํ ๋งํ
www.acmicpc.net
ํ๋ค๊ฐ ์ ์ ๋ผ์ ๋ค๋ฅธ ๋ถ๋ค ์ฝ๋ ์ฐธ๊ณ ํด์ ์์ ํ๋ค..
๋๋ ์ธ์ ์ฏค ํผ์์ ๋น ๋ฅด๊ฒ ํ ์ ์์๊น?ใ ใ กใ ใ
์์ด๋์ด
- ์ฒ์๋ถํฐ ์ต์ด ์๋ ํ ๋งํ ์ขํ๋ฅผ ํ์ ์ ์ฅํ๊ณ bfs๋ฅผ ์ํํ๋ค
- ์ธ์ ํ ์นธ ์ค์์ ์์ง ์ ์ต์ ํ ๋งํ ๊ฐ ์์ผ๋ฉด (์ธ์ ํ ์ขํ์ ๊ทธ๋ํ ๊ฐ)์ (ํ์ฌ๊ทธ๋ํ๊ฐ+1) ๋ก ๋ฐ๊พธ์ด์ค๋ค
- bfs๊ฐ ์ข ๋ฃ๋๋ฉด ์ฌ์ ํ ์ ์ต์ ํ ๋งํ ๊ฐ ์๋์ง ๊ฒ์ฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
- ์ต์ง ์์ ํ ๋งํ ๊ฐ ์กด์ฌํ๋ค๋ฉด 1์ ๋นผ์ค๋ค.
- ํ ๋งํ ๊ฐ ๋ชจ๋ ์ต์๋ค๋ฉด ๊ทธ๋ํ๊ฐ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ์์ ์ผ์์ด๋ค. (์์ ์ผ์๋ 2๋ถํฐ ์นด์ดํธํ์ผ๋ 1์ ๋นผ๊ณ ์ถ๋ ฅํด์ค๋ค.)
-์์)
์ด๊ธฐ ๊ทธ๋ํ
1 | 1 | 0 | -1 |
0 | 0 | -1 | 1 |
0 | 0 | -1 | 0 |
1์ผ ๊ฒฝ๊ณผ ํ
1 | 1 | 2 | -1 |
2 | 2 | -1 | 1 |
0 | 0 | -1 | 2 |
2์ผ ๊ฒฝ๊ณผ ํ
1 | 1 | 2 | -1 |
2 | 2 | -1 | 1 |
3 | 3 | -1 | 2 |
bfs์ข ๋ฃ
from collections import deque
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def tomato():
while q:
x,y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
#์ธ์ ํ ์ขํ๊ฐ ๋ฒ์ ์กฐ๊ฑด์ ๋ง์กฑํ๊ณ ํ ๋งํ ๊ฐ ์์ง ์ ์ต์์ ๊ฒฝ์ฐ
if 0<=nx<n and 0<=ny<m and graph[nx][ny]==0:
graph[nx][ny]=graph[x][y]+1
q.append((nx,ny))
return
#์
๋ ฅ๋ฐ๊ธฐ
m,n = map(int,input().split())
graph=[]
for i in range(n):
graph.append(list(map(int,input().split())))
#์ด๋ฏธ ์ต์ด์๋ ํ ๋งํ ์ขํ๋ฅผ ํ์ ๋ฃ๋๋ค
q = deque()
for i in range(n):
for j in range(m):
if graph[i][j]==1:
q.append((i,j))
#bfs์ํ
tomato()
#์ ๋ต ์ถ๋ ฅ
ans=0
for i in range(n):
for j in range(m):
#์ ์ต์ ํ ๋งํ ๊ฐ ํ๋๋ผ๋ ์กด์ฌํ๋ฉด -1์ ์ถ๋ ฅํ๊ณ ์ข
๋ฃ
if graph[i][j] == 0:
print(-1)
exit(0)
if graph[i][j]>ans:
ans = graph[i][j]
print(ans-1)
728x90
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]9205๋ฒ: ๋งฅ์ฃผ ๋ง์๋ฉด์ ๊ฑธ์ด๊ฐ๊ธฐ (0) | 2023.02.27 |
---|---|
[๋ฐฑ์ค]11724๋ฒ: ์ฐ๊ฒฐ ์์์ ๊ฐ์ (0) | 2023.02.26 |
[๋ฐฑ์ค]2468๋ฒ: ์์ ์์ญ (0) | 2023.02.25 |
[๋ฐฑ์ค]10026๋ฒ: ์ ๋ก์์ฝ (0) | 2023.02.24 |
[๋ฐฑ์ค]4963๋ฒ: ์ฌ์ ๊ฐ์ (0) | 2023.02.23 |