๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm/๋ฐฑ์ค€

[๋ฐฑ์ค€] 2178 ๋ฏธ๋กœ (ํŒŒ์ด์ฌ/python)

by chjcoder 2023. 6. 19.

๐ŸŽˆ๋ฌธ์ œ

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ํ•œ๋‹ค.