Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[python3] ์ด์ฝ”ํ…Œ - ๋ฏธ๋กœํƒˆ์ถœ (ch5. DFS/BFS)

๊ฐ์ž ๐Ÿฅ” 2021. 6. 22. 18:50
๋ฐ˜์‘ํ˜•

์ฐธ๊ณ ) ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ์ฑ…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ๋ฌธ์ œ์™€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. 
๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋Š” ์ž์„ธํ•˜๊ฒŒ ์ ์ง€ ์•Š๊ณ , ๊ฐ„๋‹จํ•œ ์„ค๋ช…๊ณผ ์ œ ์ฝ”๋“œ๋งŒ ์˜ฌ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์‹ค์ „๋ฌธ์ œ(2) ๋ฏธ๋กœํƒˆ์ถœ

- NxM ์˜ ๋ฏธ๋กœ
- ์‹œ์ž‘ ์œ„์น˜๋Š” (1,1), ํƒˆ์ถœ๊ตฌ๋Š” (N,M)
- ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ 1, ๊ดด๋ฌผ์ด ์กด์žฌํ•˜๋Š” ์นธ 0
- ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์น˜๋Š” ์นธ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ

##### ์ž…๋ ฅ์กฐ๊ฑด
- ์ฒซ์จ‹์ค„์— N,M ์ฃผ์–ด์ง
- 4 <= N,M <= 200
- ๋‘˜์จ‹์ค„ ๋ถ€ํ„ฐ๋Š” ๋ฏธ๋กœ์— ๋Œ€ํ•œ ์ •๋ณด (1 or 0)
- (1,1) (N,M)์€ ํ•ญ์ƒ 1

 

<๋ฌธ์ œํ’€์ด>

1. ์ฒซ๋ฒˆ์งธ ์‹œ๋„

queue๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ˜•์‹(๋ฐ˜๋ณต๋ฌธ) ํ˜•ํƒœ๋กœ ํ’€์—ˆ๋Š”๋ฐ ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ ค์„œ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋œฐ๊ฒƒ ๊ฐ™๋‹ค. 
๊ทธ๋ž˜์„œ ์ฑ…์„ ์ฐธ๊ณ ํ•˜์—ฌ queue๋ฅผ ํ™œ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

2. ๋‘๋ฒˆ์งธ ์‹œ๋„ ๋ฐ ์˜ค๋‹ต๋…ธํŠธ

- ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ 999๋กœ ๋ฐ”๊พธ๋Š” ํ˜•์‹์„ ํ™œ์šฉํ–ˆ์ง€๋งŒ
- count ํ˜•์‹์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ, ์ฝ”๋“œ ํŠน์„ฑ์ƒ ๋ชจ๋“  1์„ ๊ฑฐ์น˜๊ธฐ ๋•Œ๋ฌธ์— 1์ธ ๊ฐ’์ด ๋ชจ๋‘ 999๋กœ ๋ฐ”๋€๋‹ค.
- ๋”ฐ๋ผ์„œ 999๋กœ ๋ณ€ํ™”ํ•˜๋Š” ๊ฐ’์„ ์„ธ์–ด์ฃผ๊ฒŒ๋˜๋ฉด ๊ฒฐ๊ตญ 1์˜ ๊ฐฏ์ˆ˜๋ฅผ ์„ธ๋Š”๊ฒƒ๊ณผ ๊ฐ™์•„์ง„๋‹ค.
- ํ•˜๋Š” ์ˆ˜ ์—†์ด ์ฑ…์„ ์ฐธ์กฐํ•˜์—ฌ 1, 2, 3, ,,, ์ด๋ ‡๊ฒŒ ๊ฐ’์„ ๋”ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ง„์งœ...์–ด๋ ต๋‹ค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ...
- ๋”ํ•ด ์ค€๋‹ค๋Š” ๊ฒƒ?  1๋ฒˆ์งธ๋กœ ๋ฐฉ๋ฌธํ•œ (0,0)์˜ ๊ฐ’์ด 1์ผ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  (0,0)๊ณผ ์ธ์ ‘ํ•œ 1์ธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋ ํ…๋ฐ ๊ทธ ๋…ธ๋“œ๋Š” ์ „๋ถ€ 2๊ฐ€ ๋ ๊ฒƒ์ด๋‹ค. 
- ์ „๋ถ€ 2๋กœ ๋ณ€ํ•œ nx, ny ๋Š” ๋ชจ๋‘ ํ์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๊ณ , ํ๋ฅผ ํ•˜๋‚˜์”ฉ ๋นผ์˜ค๋ฉด์„œ ๋˜ ๊ทธ์™€ ์ธ์ ‘ํ•œ ๊ฐ’๋“ค์ด 3์œผ๋กœ ๋ณ€ํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๊ฒฐ๊ตญ 1๋กœ ์—ฐ๊ฒฐ๋˜์–ด์žˆ๋Š” ๊ธธ(?)๋งŒ 3์œผ๋กœ ๋ณ€ํ•  ๊ฒƒ์ด๊ณ , ์ธ์ ‘ํ•œ ๊ธธ์ด ์—†์„ ๊ฒฝ์šฐ 2์—์„œ ๋จธ๋ฌด๋ฅด๊ฒŒ ๋œ๋‹ค.

from collections import deque
# ์ƒํ•˜์ขŒ์šฐ ์‚ดํŽด๋ณด๊ณ  1์ด๋ฉด ํ•ด๋‹น์นธ์œผ๋กœ ์ด๋™, ๊ทธ๋ฆฌ๊ณ  result +1 ํ•˜๋Š” ๋ฐฉ์‹์‚ฌ์šฉ
#์ž…๋ ฅ ๋ฐ›๊ธฐ
n, m = map(int, input().split())

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

# 1. ์ƒํ•˜์ขŒ์šฐ ์ด๋™ ๋ฐฉํ–ฅ ์ •์˜
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
    
def bfs(x,y):

    q = deque()
    q.append((x,y)) # 0,0 ํ์— ๋„ฃ๊ณ  ์‹œ์ž‘
    
    while q: # ํ๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]

            # nx, ny๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋ฉด ๋ฌด์‹œํ•˜๊ณ  ๋‹ค์Œ i๋กœ
            if nx >= n or ny >= m or nx < 0 or ny < 0 :
                continue

            # nx, ny ๋…ธ๋“œ๊ฐ€ ๊ดด๋ฌผ์นธ (0) ์ธ ๊ฒฝ์šฐ๋„ ๋‹ค์Œ i๋กœ
            if graph[nx][ny] == 0:
                continue
            
            # ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ธธ์ธ 1์ด๋ฉด
            if graph[nx][ny] == 1:
                graph[nx][ny] = graph[x][y] + 1
                q.append((nx,ny))
                
    return graph[n-1][m-1]

print(bfs(0,0))
  • ์ถœ๋ ฅ

์ฒซ์จ‹์ค„ N M
๋‘˜์ฉƒ์ค„๋ถ€ํ„ฐ N+1์ค„๊นŒ์ง€ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ž…๋ ฅ๋ฐ›์Œ
๋งˆ์ง€๋ง‰์ค„์€ ์ตœ์ข… ์ถœ๋ ฅ ๊ฐ’

๋ฐ˜์‘ํ˜•