๐๋ฌธ์
https://www.acmicpc.net/problem/2178
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1. ์ง๋์ผํ๋ ์ต์ ์นธ์๋ฅผ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก bfs๋ก ๊ฒฐ์ . ( bfs ๋? )
2. ์ต์ ์ ๋ฃจํธ๋ฅผ ์ฐพ์ ๋๋ ๋งต์ ์ด๋ ํ์๋ฅผ ์ ์ฅํด๋๊ฐ๋ ๊ฒ์ด ์ข๋ค.(์์ฃผ ์ฐ์ด๋ฏ๋ก ๊ผญ ๊ธฐ์ต)
๐ป์ฝ๋
from collections import deque
def bfs(x,y):
deq = deque()
deq.append([x,y])
# ์ํ์ข์ฐ ์ด๋์ ์ํ ์ขํ ์ค์
dx = [0,0,-1,1]
dy = [1,-1,0,0]
while deq:
x,y = deq.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
continue
if graph[nx][ny] == 1: # 1์ ๋ง๋๋ฉด
graph[nx][ny] = graph[x][y] + 1
deq.append([nx,ny]) # ํด๋น ์ขํ์ ์ํ์ข์ฐ๋ฅผ ์กฐ์ฌํด๋ณด๊ธฐ ์ํด ํ์ ์ ์ฅ
return graph[n-1][m-1]
# n: ์ธ๋ก(x), m : ๊ฐ๋ก(y)
n,m = map(int, input().split())
# graph
graph = []
for i in range(n):
graph.append(list(map(int,input())))
# ํ์ ์์
print(bfs(0,0))
๐์ฝ๋ ์ค๋ช
1. ๊ฐ๋ก ์ธ๋ก ๊ทธ๋ํ์ ํฌ๊ธฐ๋ฅผ n,m๋ณ์๋ก ๋ฐ์์ค๋ค.
2. graph ๋ณ์์ ๋ฏธ๋ก ์ ๋ณด๋ฅผ ๋ฐ์์จ๋ค. ( input์ผ๋ก ๋ฐ์์ค๋ฉด str()ํ์ด ๋๊ณ , ๋์ค์ ๋ฏธ๋ก์ ๊ฐ ์นธ๋ง๋ค ์ด๋ ํ์๋ฅผ ์ ์ฅํด ๋๊ฐ ๊ฒ์ ๊ณ ๋ คํ์ฌ intํ์ผ๋ก ๋ณํ ํ listํํ๋ก ์ ์ฅ : '10101' -> [1,0,1,0,1] )
3. ๋ฌธ์ ์์ (1,1)์์ ์ถ๋ฐํ์ฌ (N,M)์ ์์น๋ก ์ด๋ํ๋๋ฐ ์ง๋์ผํ๋ ์ต์ ์นธ ์๋ฅผ ๊ตฌํ๋ผ ํ์ผ๋ฏ๋ก bfs()์ ๋ฐ๋ก (0,0)์ขํ๋ฅผ ๋ฃ๊ณ bfs๋๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ (์ด๋, ๋ฌธ์ ์์ (1,1)์ด ๋ด 2์ฐจ์ ๋ฆฌ์คํธ์์๋ (0,0)์์ ์จ๋๊ฑฐ๋ ๊ธฐ์ตํด ๋ ๊ฒ)
4. bfs ํจ์๋ก ๋์ด์์, ๋ฐ์ ์ขํ๋ฅผ ํ์ ๋ฃ๋๋ค.
5. ์ํ์ข์ฐ๋ก๋ง ์ด๋ํ ์ ์๋ค๊ณ ํ์ผ๋ฏ๋ก ํด๋น ์ํ์ข์ฐ์ ํด๋นํ๋ ์ขํ๊ฐ์ dx,dy์ ๋ฃ์ด๋๋ค.
6. while deq:์ผ๋ก ์ค์ ํจ์ผ๋ก์จ ํ๊ฐ ๋ชจ๋ ๋น ๋๊น์ง ๋ฐ๋ณตํ๋๋ก ํจ.
7. ํ์ ๋ค์ด์๋ ๊ฐ(0,0)์ ๋นผ๋ด์ด x,y ๋ณ์์ ์ง์ด ๋ฃ๊ณ , for๋ฌธ์ ํตํด ์ํ์ข์ฐ 4๋ฐฉํฅ์ผ๋ก ์ด๋ํด๋ณด๊ธฐ ์์ํ๋ค.
8. ์ขํ ์ด๋์ ํ์ ๋, graph๋ฅผ ๋ฒ์ด๋๋ฉด ๊ทธ ๋ฐ์ ์ฝ๋๋ ์ํํ์ง ์๋๋ค.
9. ์ขํ ์ด๋์ ํ์ ๋, ํด๋น ์ขํ๊ฐ์ด 1์ด๋ฉด ์ด๋ํ ์ ์๋ ์นธ์ด๋ผ๋ ๋ป์ด๋ฏ๋ก ์ด์ ์ขํ์ ๊ฐ์์ 1์ ๋ํด์ค๋ค.
10. ํ๊ฐ ๋ชจ๋ ๋น๊ฒ๋์ด while๋ฌธ์ ๋ฒ์ด๋๊ฒ ๋๋ฉด bfs()๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ์์ ์ด ๊ฐ ์ ์๋ ๋ชจ๋ ์ขํ๋ฅผ ๋ค ๋์๋ณด๊ณ ๋์ค๊ฒ ๋๋ค.
11. ๋ฐ๋ผ์ (N,M)์ ์์น์ธ graph[n-1][m-1]์ returnํ๋ค.
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 9498 ์ํ ์ฑ์ (ํ์ด์ฌ/python) (0) | 2023.06.19 |
---|---|
[๋ฐฑ์ค] 1330 ๋ ์ ๋น๊ตํ๊ธฐ (ํ์ด์ฌ/python) (0) | 2023.06.19 |
[๋ฐฑ์ค] 4179 ๋ถ! (ํ์ด์ฌ/python) (with ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ) (1) | 2023.06.19 |
[๋ฐฑ์ค] 7576 ํ ๋งํ (ํ์ด์ฌ/python) (0) | 2023.06.19 |
[๋ฐฑ์ค] 1926 ๊ทธ๋ฆผ (ํ์ด์ฌ/python) (0) | 2023.06.17 |