ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 17086 ์•„๊ธฐ ์ƒ์–ด 2 with Python
    PS 2022. 7. 17. 22:03
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 17086 ์•„๊ธฐ ์ƒ์–ด 2

    ๐Ÿ’ก ์กฐ๊ฑด

    1. Nร—M ํฌ๊ธฐ์˜ ๊ณต๊ฐ„์— ์•„๊ธฐ ์ƒ์–ด ์—ฌ๋Ÿฌ ๋งˆ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ๊ณต๊ฐ„์€ 1ร—1 ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ํ•œ ์นธ์—๋Š” ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์ตœ๋Œ€ 1๋งˆ๋ฆฌ ์กด์žฌํ•œ๋‹ค.
      N๊ณผ M(2 โ‰ค N, M โ‰ค 50)
    1. ์–ด๋–ค ์นธ์˜ ์•ˆ์ „ ๊ฑฐ๋ฆฌ๋Š” ๊ทธ ์นธ๊ณผ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ์•„๊ธฐ ์ƒ์–ด์™€์˜ ๊ฑฐ๋ฆฌ์ด๋‹ค.
      ๋‘ ์นธ์˜ ๊ฑฐ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ์นธ์—์„œ ๋‹ค๋ฅธ ์นธ์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์ง€๋‚˜์•ผ ํ•˜๋Š” ์นธ์˜ ์ˆ˜์ด๊ณ , ์ด๋™์€ ์ธ์ ‘ํ•œ 8๋ฐฉํ–ฅ(๋Œ€๊ฐ์„  ํฌํ•จ)์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    1. 0์€ ๋นˆ ์นธ, 1์€ ์•„๊ธฐ ์ƒ์–ด๊ฐ€ ์žˆ๋Š” ์นธ์ด๋‹ค.
    1. ๋นˆ ์นธ๊ณผ ์ƒ์–ด์˜ ์ˆ˜๊ฐ€ ๊ฐ๊ฐ ํ•œ ๊ฐœ ์ด์ƒ์ธ ์ž…๋ ฅ๋งŒ ์ฃผ์–ด์ง„๋‹ค.
    1. ์•ˆ์ „ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ํฐ ์นธ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
    1. heapq, ์šฐ์„ ์ˆœ์œ„ ํ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin
    import heapq
    
    n, m = map(int, stdin.readline().split())
    arr, shark = [], []
    dx, dy = [1, 0, 0, -1, 1, -1, 1, -1], [0, 1, -1, 0, 1, -1, -1, 1]
    ans = -1
    
    for i in range(n):
        data = list(map(int, stdin.readline().split()))
        arr.append(data)
        for j in range(m):
            if data[j] == 1:
                shark.append((i, j))
    
    
    def solve(x, y):
        q = []
        heapq.heappush(q, (0, x, y))
        visited = set()
        visited.add((x, y))
    
        while q:
            dist, x, y = heapq.heappop(q)
            if arr[x][y] == 1:
                return dist
    
            for i in range(8):
                nx, ny = dx[i] + x, dy[i] + y
                if 0 <= nx < n and 0 <= ny < m:
                    if (nx, ny) not in visited:
                        heapq.heappush(q, (dist + 1, nx, ny))
                        visited.add((nx, ny))
    
    
    for i in range(n):
        for j in range(m):
            if arr[i][j] == 0:
                res = solve(i, j)
                if res > ans:
                    ans = res
    
    print(ans)

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ 1

    5 4
    0 0 1 0
    0 0 0 0
    1 0 0 0
    0 0 0 0
    0 0 0 1

    ์‹คํ–‰๊ฒฐ๊ณผ 1

    2

    ์˜ˆ์ œ 2

    7 4
    0 0 0 1
    0 1 0 0
    0 0 0 0
    0 0 0 1
    0 0 0 0
    0 1 0 0
    0 0 0 1

    ์‹คํ–‰๊ฒฐ๊ณผ 2

    2

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๋ฌธ์ œ์—์„œ ๋ณด๋ฉด, N๊ณผ M์ด ๊ฐ๊ฐ ์ตœ๋Œ€ 50์ด๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ 50 * 50 ์งœ๋ฆฌ 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. 1์€ ์•„๊ธฐ ์ƒ์–ด์ด๋ฉฐ, 0์€ ์•ˆ์ „ํ•œ ์นธ์ด๋‹ค. ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์šฐ์„ ์ˆœ์œ„ ํ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
      ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋จผ์ € ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.
    1. ์•ˆ์ „๊ฑฐ๋ฆฌ์˜ ๊ฐ’์„ ์šฐ์„ ์ˆœ์œ„๋กœ ๋‘์–ด ํ์— ์ €์žฅํ•˜๋ฉด์„œ 8 ๋ฐฉํ–ฅ์œผ๋กœ, ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์นธ์„ ํ์— ๋„ฃ์–ด์ค€๋‹ค.
      ํŒŒ์ด์ฌ์˜ heapq ์—์„œ๋Š” ์ตœ์†Œ ํž™(Min Heap)์˜ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.
      ์ตœ์†Œ ํž™์˜ ๋ฃจ๋“œ ๋…ธ๋“œ๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    1. ans ์˜ ๊ฐ’์„ -1๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , board๋ฅผ ํ•œ์นธ์”ฉ ์ˆœํšŒํ•˜๋ฉด์„œ 0์ธ ๊ฒฝ์šฐ์— solve() ํ•จ์ˆ˜์— ์ขŒํ‘œ๊ฐ’์„ ๋„˜๊ฒจ์ค€๋‹ค.
      solve() ํ•จ์ˆ˜์—์„œ๋Š” heapq ๋ฅผ ์‚ฌ์šฉํ•ด BFS๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด์„œ, 8 ๋ฐฉํ–ฅ์„ ํƒ์ƒ‰ํ•œ๋‹ค.
      ์•ˆ์ „๊ฑฐ๋ฆฌ๋Š” ์–ด๋–ค ์นธ์˜ ์•ˆ์ „ ๊ฑฐ๋ฆฌ๋Š” ๊ทธ ์นธ๊ณผ ๊ฐ€์žฅ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์šด ์•„๊ธฐ ์ƒ์–ด์™€์˜ ๊ฑฐ๋ฆฌ ์ด๋‹ค.
    1. (4)๋ฒˆ์ฒ˜๋Ÿผ ํƒ์ƒ‰์„ ํ•˜๋ฉด ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์•„๊ธฐ ์ƒ์–ด์˜ ์นธ์„ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํž™ ํ์—์„œ ๋ฝ‘์€ ์ขŒํ‘œ์˜ ๊ฐ’์ด ์•„๊ธฐ ์ƒ์–ด์ผ ๊ฒฝ์šฐ, dist๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
    1. ๋ฐ˜ํ™˜๋œ dist๋ฅผ ans์™€ ๋น„๊ตํ•ด ๋” ํฐ ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ ํ›„, board ๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ–ˆ๋‹ค๋ฉด ans๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

    ๐Ÿ’พ ๋ฐฐ์šด์ 

    1. BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Heapq๋ฅผ ์‚ฌ์šฉํ•ด 8๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ข‹์€ ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.