๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[์ด์ฝ”ํ…Œ]๋ฏธ๋กœ ํƒˆ์ถœ / [๋ฐฑ์ค€]2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

by syLim___ 2023. 2. 23.
728x90

https://www.acmicpc.net/problem/2178

 

2178๋ฒˆ: ๋ฏธ๋กœ ํƒ์ƒ‰

์ฒซ์งธ ์ค„์— ๋‘ ์ •์ˆ˜ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” M๊ฐœ์˜ ์ •์ˆ˜๋กœ ๋ฏธ๋กœ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ๊ฐ์˜ ์ˆ˜๋“ค์€ ๋ถ™์–ด์„œ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net


from collections import deque

#๋ฏธ๋กœ ์ •๋ณด ์ž…๋ ฅ๋ฐ›๊ธฐ
n, m = map(int,input().split())

graph=[]
for i in range(n):
  graph.append(list(map(int,input())))


#์ƒํ•˜์ขŒ์šฐ ์ขŒํ‘œ
dx=[-1,1,0,0]
dy=[0,0,-1,1]

#(0,0) ์‹œ์ž‘์ ์œผ๋กœ bfs ์ˆ˜ํ–‰

q=deque()
q.append((0,0))

while q:
  x,y = q.popleft()
  #์ƒํ•˜์ขŒ์šฐ ์ธ์ ‘ํ•œ ์นธ ์ฒดํฌ
  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]
    #nx, ny๊ฐ€ ๋ฏธ๋กœ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ณ , ๋ฐฉ๋ฌธํ•œ ์  ์—†๋Š” ๋…ธ๋“œ์ผ ๋•Œ
    if 0<=nx<n and 0<=ny<m and graph[nx][ny]==1:
      graph[nx][ny] = graph[x][y] + 1
      q.append((nx,ny))

print(graph[n-1][m-1])

bfs๋กœ ์ˆ˜ํ–‰ํ•˜๋˜, ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ์™€ ์นธ์˜ ๊ฐœ์ˆ˜ count๋ฅผ ๋™์‹œ์— ํ•ด์ฃผ๋ฉด ๋œ๋‹ค!

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ด๋ ‡๊ฒŒ ์ƒ๊ธด ๋ฏธ๋กœ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

1 0 0
1 1 1
0 0 1

์‹œ์ž‘์  (0,0)์—์„œ์˜ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜๋Š” 1์ด๋‹ค.

์ธ์ ‘ํ•œ ์นธ ์ค‘ ๋ฐฉ๋ฌธ ๊ฐ€๋Šฅํ•œ ์นธ์€ (1,0)์ธ๋ฐ, ((1,0)๊นŒ์ง€์˜ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜)๋Š” ((0,0)๊นŒ์ง€์˜ ์ด๋™ ์นธ ๊ฐœ์ˆ˜) + 1 =2์ด๋‹ค.

(1,0)์„ ์‹œ์ž‘์ ์œผ๋กœ bfs๋ฅผ ๋˜๋‹ค์‹œ ์ˆ˜ํ–‰ํ•˜๋ฉด (1,1)์„ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค.

(1,1)๊นŒ์ง€์˜ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜๋Š” ((1,0)๊นŒ์ง€์˜ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜) + 1 = 3์ด๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ bfs๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ ์ด๋™ ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ updateํ•ด์ฃผ๋ฉด ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ์™€ ์ด๋™ ์นธ ๊ฐœ์ˆ˜ ์„ธ๋Š” ์ผ์„ ํ•œ ๋ฒˆ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

graph[i][j]==0์ด๋ฉด ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†๋Š” ์นธ

graph[i][j]==1์ด๋ฉด ๋ฐฉ๋ฌธํ•œ ์  ์—†๋Š” ์นธ์ด๋‹ค. --> updateํ•ด์ฃผ๊ธฐ

graph[i][j]>1์ด๋ฉด ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ๋œ ์นธ์ด๋‹ค.

 

 

 

 

 

 

 

 

728x90