[๋ฐฑ์ค€] ์•Œ๊ณ ์ŠคํŒŸ / 1261๋ฒˆ / ํŒŒ์ด์ฌ / Python / Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜
Algorithm/Baekjoon

[๋ฐฑ์ค€] ์•Œ๊ณ ์ŠคํŒŸ / 1261๋ฒˆ / ํŒŒ์ด์ฌ / Python / Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜

728x90
๋ฐ˜์‘ํ˜•

 

๐Ÿ’กsolutions )

๐Ÿ’ฌ ๋‹จ์ˆœ ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ, ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ๋…ธ๋“œ์˜ ๋น„์šฉ์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ์€ ๋ฒฝ์„ ๋ถ€์ˆœ ํšŸ์ˆ˜(cnt)

๐Ÿ’ฌ BFS๋กœ๋„ ๋ฐฉ๋ฌธ ์ค‘๋ณต์œผ๋กœ ํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ

 

 

๐ŸŽซcode )

import sys
import heapq


def dijkstra():
    heap = []
    heapq.heappush(heap, [0, 0, 0])  # ์‹œ์ž‘์ 
    visit[0][0] = 1

    while heap:
        cnt, x, y = heapq.heappop(heap)  # ๋ฒฝ ๋ถ€์ˆœ ํšŸ์ˆ˜๊ฐ€ ์ตœ์†Œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋‚˜์˜ด
        for k in range(4):
            nx, ny = x + dx[k], y + dy[k]
            if x == n - 1 and y == m - 1:  # ์ข…๋ฃŒ์กฐ๊ฑด
                print(cnt)
                break
            if 0 <= nx < n and 0 <= ny < m and not visit[nx][ny]:
                visit[nx][ny] = 1

                if maze[nx][ny]:  # ๋ฒฝ์ธ ๊ฒฝ์šฐ
                    heapq.heappush(heap, [cnt + 1, nx, ny])
                else:  # ๋นˆ๋ฐฉ์ธ ๊ฒฝ์šฐ
                    heapq.heappush(heap, [cnt, nx, ny])


input = sys.stdin.readline
m, n = map(int, input().rstrip().split(' '))
maze = [list(map(int, input().rstrip())) for _ in range(n)]
visit = [[0] * m for _ in range(n)]
dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
dijkstra()

 

๐Ÿ“Œ description )

๋ฌธ์ œ์ถœ์ฒ˜ : www.acmicpc.net/problem/1261

 

1261๋ฒˆ: ์•Œ๊ณ ์ŠคํŒŸ

์ฒซ์งธ ์ค„์— ๋ฏธ๋กœ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€๋กœ ํฌ๊ธฐ M, ์„ธ๋กœ ํฌ๊ธฐ N (1 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ฏธ๋กœ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž 0๊ณผ 1์ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ ๋ฐฉ์„ ์˜๋ฏธํ•˜๊ณ , 1์€ ๋ฒฝ์„ ์˜๋ฏธ

www.acmicpc.net

๋ฌธ์ œ

์•Œ๊ณ ์ŠคํŒŸ ์šด์˜์ง„์ด ๋ชจ๋‘ ๋ฏธ๋กœ์— ๊ฐ‡ํ˜”๋‹ค. ๋ฏธ๋กœ๋Š” N*M ํฌ๊ธฐ์ด๋ฉฐ, ์ด 1*1ํฌ๊ธฐ์˜ ๋ฐฉ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋ฏธ๋กœ๋Š” ๋นˆ ๋ฐฉ ๋˜๋Š” ๋ฒฝ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๋นˆ ๋ฐฉ์€ ์ž์œ ๋กญ๊ฒŒ ๋‹ค๋‹ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฒฝ์€ ๋ถ€์ˆ˜์ง€ ์•Š์œผ๋ฉด ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค.

์•Œ๊ณ ์ŠคํŒŸ ์šด์˜์ง„์€ ์—ฌ๋Ÿฌ๋ช…์ด์ง€๋งŒ, ํ•ญ์ƒ ๋ชจ๋‘ ๊ฐ™์€ ๋ฐฉ์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์—ฌ๋Ÿฌ ๋ช…์ด ๋‹ค๋ฅธ ๋ฐฉ์— ์žˆ์„ ์ˆ˜๋Š” ์—†๋‹ค. ์–ด๋–ค ๋ฐฉ์—์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์€ ์ƒํ•˜์ขŒ์šฐ๋กœ ์ธ์ ‘ํ•œ ๋นˆ ๋ฐฉ์ด๋‹ค. ์ฆ‰, ํ˜„์žฌ ์šด์˜์ง„์ด (x, y)์— ์žˆ์„ ๋•Œ, ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์€ (x+1, y), (x, y+1), (x-1, y), (x, y-1) ์ด๋‹ค. ๋‹จ, ๋ฏธ๋กœ์˜ ๋ฐ–์œผ๋กœ ์ด๋™ ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

๋ฒฝ์€ ํ‰์†Œ์—๋Š” ์ด๋™ํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์•Œ๊ณ ์ŠคํŒŸ์˜ ๋ฌด๊ธฐ AOJ๋ฅผ ์ด์šฉํ•ด ๋ฒฝ์„ ๋ถ€์ˆ˜์–ด ๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๋ฒฝ์„ ๋ถ€์ˆ˜๋ฉด, ๋นˆ ๋ฐฉ๊ณผ ๋™์ผํ•œ ๋ฐฉ์œผ๋กœ ๋ณ€ํ•œ๋‹ค.

๋งŒ์•ฝ ์ด ๋ฌธ์ œ๊ฐ€ ์•Œ๊ณ ์ŠคํŒŸ์— ์žˆ๋‹ค๋ฉด, ์šด์˜์ง„๋“ค์€ ๊ถ๊ทน์˜ ๋ฌด๊ธฐ sudo๋ฅผ ์ด์šฉํ•ด ๋ฒฝ์„ ํ•œ ๋ฒˆ์— ๋‹ค ์—†์• ๋ฒ„๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ, ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด ๋ฌธ์ œ๋Š” Baekjoon Online Judge์— ์ˆ˜๋ก๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, sudo๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

ํ˜„์žฌ (1, 1)์— ์žˆ๋Š” ์•Œ๊ณ ์ŠคํŒŸ ์šด์˜์ง„์ด (N, M)์œผ๋กœ ์ด๋™ํ•˜๋ ค๋ฉด ๋ฒฝ์„ ์ตœ์†Œ ๋ช‡ ๊ฐœ ๋ถ€์ˆ˜์–ด์•ผ ํ•˜๋Š”์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋ฏธ๋กœ์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€๋กœ ํฌ๊ธฐ M, ์„ธ๋กœ ํฌ๊ธฐ N (1 ≤ N, M ≤ 100)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์—๋Š” ๋ฏธ๋กœ์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆซ์ž 0๊ณผ 1์ด ์ฃผ์–ด์ง„๋‹ค. 0์€ ๋นˆ ๋ฐฉ์„ ์˜๋ฏธํ•˜๊ณ , 1์€ ๋ฒฝ์„ ์˜๋ฏธํ•œ๋‹ค.

(1, 1)๊ณผ (N, M)์€ ํ•ญ์ƒ ๋šซ๋ ค์žˆ๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์•Œ๊ณ ์ŠคํŒŸ ์šด์˜์ง„์ด (N, M)์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒฝ์„ ์ตœ์†Œ ๋ช‡ ๊ฐœ ๋ถ€์ˆ˜์–ด์•ผ ํ•˜๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•