Algorithm Problem/Python

[python] ๋ฐฑ์ค€ - 1261. ์•Œ๊ณ ์ŠคํŒŸ

deo2kim 2020. 11. 15. 00:44
๋ฐ˜์‘ํ˜•

๐Ÿค”๋ฌธ์ œ ํ•ด๊ฒฐ

  • G4 | ๋‹ค์ต์ŠคํŠธ๋ผ(BFS๋„ ๊ฐ€๋Šฅ)

๋‹ค์ต์ŠคํŠธ๋ผ ์œ ํ˜•์œผ๋กœ ๋˜์–ด์žˆ์ง€๋งŒ BFS๋„ ๊ฐ€๋Šฅํ•œ๊ฑฐ ๊ฐ™๋‹ค.

BFS๋กœ ํ’€ ๋ฉด ๊ธธ์„ ์ฐพ์•„ ๊ฐˆ ๋•Œ 0์ด๋ฉด ๊ทธ๋ƒฅ ๊ฐ€๊ณ  1์ด๋ฉด +1ํ•ด์„œ ๊ฐ€๋ฉด ๋œ๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ํ’€์–ด๋ดค๋‹ค.

( ๋‹ค์ต์ŠคํŠธ๋ผ์™€ ์šฐ์„ ์ˆœ์œ„ํ(ํž™ํ)๋Š” ์ง๊ฟ )

 

  • ์ฃผ์–ด์ง„ ๋ฏธ๋กœ์™€ ๊ฐ™์€ ํฌ๊ธฐ์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ ๋‹ค. ( ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค„ ๋ฐฐ์—ด )
  • 0,0 ๋ถ€ํ„ฐ ์ฃผ๋ณ€์„ ํƒ์ƒ‰ํ•˜๋ฉฐ ๋ฐฉ(0)์ด๋ฉด ๋น„์šฉ์„ ํ˜„์žฌ๋น„์šฉ์œผ๋กœ ๋„ฃ๊ณ , ๋ฒฝ(1)์ด๋ฉด ๋น„์šฉ์„ ํ˜„์žฌ๋น„์šฉ +1ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.
  • ์—…๋ฐ์ดํŠธ๊ฐ€ ๋œ ์ง€์ ์„๋“ค ํž™ํ์— ๋„ฃ๊ณ  ๋ชฉ์ ์ง€๊ฐ€ ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๐Ÿ’ป์†Œ์Šค ์ฝ”๋“œ

import heapq

if __name__ == '__main__':
    N, M = map(int, input().split())  # ๋ฌธ์ œ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘์ด๋ฏ€๋กœ -1 ํ•ด์คŒ
    room = [list(map(int, input())) for _ in range(M)]

    # ๊ฐ€์ค‘์น˜ 2์ฐจ์› ๋ฐฐ์—ด
    key = [[float('inf')] * N for _ in range(M)]

    pq = []
    heapq.heappush(pq, (0, 0, 0))
    key[0][0] = 0
    dx, dy = [-1, 1, 0, 0], [0, 0, -1, 1]
    while pq:
        cost, x, y = heapq.heappop(pq)
        if x == M - 1 and y == N - 1:
            print(key[x][y])
            break

        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < M and 0 <= ny < N:
                # ๋‹ค์Œ ๊ฐˆ ๊ณณ์ด ๋ฒฝ์ด๊ณ , ํ˜„์žฌ ๊ฐ€๋Š” ๋ฃจํŠธ์˜ ๋น„์šฉ์ด ๋” ์ž‘๋‹ค๋ฉด ๊ณ 
                if room[nx][ny] == 1 and cost + 1 < key[nx][ny]:
                    heapq.heappush(pq, (cost + 1, nx, ny))
                    key[nx][ny] = cost + 1
                # ๋‹ค์Œ ๊ฐˆ ๊ณณ์ด ๋ฃธ์ด๊ณ , ํ˜„์žฌ ๊ฐ€๋Š” ๋ฃจํŠธ์˜ ๋น„์šฉ์ด ๋” ์ž‘๋‹ค๋ฉด ๊ณ 
                elif room[nx][ny] == 0 and cost < key[nx][ny]:
                    heapq.heappush(pq, (cost, nx, ny))
                    key[nx][ny] = cost
 

 

๐Ÿ“•๋ฌธ์ œ ํ™•์ธ

์ถœ์ฒ˜: BACKJOON ONLINE JUDGE

๋งํฌ: https://www.acmicpc.net/problem/1261

 

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

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

www.acmicpc.net

๋ฐ˜์‘ํ˜•