π λ¬Έμ
λΉμ°ν μ΄μΌκΈ°μ§λ§, μ±κ³΅μΌλ‘ κ°λ κΈΈμ΄ νμ νννμ§λ§μ μλ€. μ¨κ° μ₯μ λ¬Όμ΄ κ°λνκ³ , μ₯μ λ¬Όμ λ§νμ μ£Όμ μμ μλ μλ€. κ·Έλμ κ·Έ μ₯μ λ¬Όμ νννλ €κ³ νλ€.
μ±κ³΅μΌλ‘ κ°λ κΈΈμ N×M격μ μμ λμ¬ μλ€. μ±κ³΅μΌλ‘ κ°λ €λ©΄ 맨 μΌμͺ½ μ μΉΈμμ μμνμ¬ μ₯μ λ¬Όμ΄ μλ μνμ’μ°λ‘ μΈμ ν μΉΈμ λ°μΌλ©΄μ 맨 μ€λ₯Έμͺ½ μλ μΉΈμ λμ°©ν΄μΌ νλ€. ν λ²μ νν μμ μΌλ‘ D×D 격μ λ΄μ μλ λͺ¨λ μ₯μ λ¬Όμ μμ¨ μ μλ€. νμ§λ§ μΈμμ 곡μ§λ μλ λ². νν μμ μλ ν° νμ΄ λ€κΈ° λλ¬Έμ, μ±κ³΅μΌλ‘ κ°λ €λ©΄ μ΅μ λͺ λ²μ νν μμ μ΄ νμνμ§ μκ³ μΆλ€.
πμ λ ₯
첫 λ²μ§Έ μ€μ 격μμ νμ κ°μ N, μ΄μ κ°μ M, ννμ λ²μ Dκ° μ£Όμ΄μ§λ€(D ≤ N, M ≤ 500, 1 ≤ D ≤ 100).
κ·Έ λ€μ Nκ°μ μ€μ 격μμ κ° νμ λνλ΄λ κΈΈμ΄ Mμ λ¬Έμμ΄μ΄ μ£Όμ΄μ§λ€. “.”μ μ₯μ λ¬Όμ΄ μλ μΉΈ, “#”μ μ₯μ λ¬Όμ΄ μλ μΉΈμ΄λ€. μΆλ° μ§μ κ³Ό μ±κ³΅μλ μ₯μ λ¬Όμ΄ μλ€.
πμΆλ ₯
첫 λ²μ§Έ μ€μ νν μμ μ μ΅μ νμλ₯Ό μΆλ ₯νλ€.
π§ λ¬Έμ μ κ·Ό
N * M 보λμμ (0, 0) μμ μμνμ¬ (N - 1, M - 1) κΉμ§ λλ¬νκΈ° μν΄μ μ΅μ λͺ λ² λ²½μ ννν΄μΌ νλκ°? λ₯Ό ꡬν΄μΌ νλ λ¬Έμ μ΄λ€. λ²½μ ννν λλ ν μΉΈλ§ λΆμ μ μλκ² μλλΌ D * D λ²μλ₯Ό ννμν¨λ€.
'κ·Έλν', 'μ΅μ', λΌλ ν€μλκ° λ±μ₯νμ¬ λ°μ΄ν¬μ€νΈλΌμΈκ° νκ³ κ·Έμͺ½μΌλ‘ λ°©ν₯μ νμλ€.
μ¬λ λ°μ΄ν¬μ€νΈλΌ μκ³ λ¦¬μ¦ μ²λΌ ννν νμλ₯Ό κΈ°μ€μΌλ‘ μ λ ¬νλ©° κ·Έλνλ₯Ό νμνλ, μ₯μ λ¬Όμ λ§λλ©΄ κ·Έκ³³μ ννν΄μ£Όλ λ°©μμ μκ°νμλ€. μ²μμλ μ₯μ λ¬Όμ λ§λλ©΄ ν΄λΉ μ₯μ λ¬Όμ μ κ±°νκΈ° μν΄ D * D λ°λ³΅ νλ©΄μ ννλ 보λλ₯Ό μ λ°μ΄νΈ ν΄μ£Όμλ€.
νμ§λ§ μ΄λ κ² κ΅¬ννλ€λ©΄ N * M * D^2λ‘ μ ν μκ° 2μ΄ μμ ν΅κ³Όνμ§ λͺ»νλ€. (500 * 500 * 100^2 = 2,500,000,000)
κ·ΈλΌ N * M * Dλ‘ ν΄κ²°ν΄μΌ νλ λ¬Έμ λΌλ κ²μ μ μ μλ€.
π λ¬Έμ νμ΄
κ·ΈλΌ D * D λ°λ³΅νμ§ μμΌλ©΄μ μ΄λ»κ² ννλ₯Ό ν μ μμκΉ. μμ΄λμ΄λ μ§μ νννμ§ μκ³ μννλ κ²μ΄λ€.
N = 9, M = 9, D = 3 μΌλ, νμ¬ (4, 4)μ μμΉνμλ€κ³ κ°μ νμ.
D = 3μ΄λ νλ² νννλ©΄ μλ κ·Έλ¦Όμ²λΌ D * D λ²μμ ν¨κ³Όκ° μμ κ²μ΄λ€.
μ μμΉμμ ννμμΌμ μ΄λν μ μλ κ²μ νμ ν΄λ³΄λ©΄ μλ κ·Έλ¦Όκ³Ό κ°λ€.
μ 리νμλ©΄ μλ μ£Όν©μ λΆλΆμΌλ‘ μΉ ν΄μ Έμλ λΆλΆμ νμ¬ μμΉ (4, 4)μμ νν νλ² ν°λ¨λ €μ μ΄λν μ μλ λ²μμ΄λ€.
D * D λλ©΄μ 보λ μ λ°μ΄νΈ ν νμ μμ΄ νμ¬ μμΉμμ νν ν°μ§κ³ λ νμ μμΉλ‘ μννλ©΄ λλ€!
λ¬Όλ‘ νμ¬ μμΉμμ μνμ’μ°λ‘λ νμμ νλ€.
μ£Όν©μ λ²μ μμ μλ κ³³μ νμ λͺ»νλκ±° μλκ°? νλ μλ¬Έμ΄ λ€ μ μμ§λ§, ννμ λ λ¨λ¦° νμλ‘ μ λ ¬ν΄μ νμνκΈ° λλ¬Έμ μ£Όν©μ λ²μ μμ΄ λͺ¨λ μ₯μ λ¬Όμ΄ μλ€λ©΄ λΉ μ§μμ΄ νμνκ² λκ³ , μ₯μ λ¬Όμ΄ μλ€λ©΄, νμ¬ μμΉκ° μλ λ€λ₯Έ μμΉμμ μΈμ κ° λ°©λ¬Ένκ² λμ΄μλ€.
κ·ΈλΌ μ΄μ λ°μ΄ν¬μ€νΈλΌ μκ³ λ¦¬μ¦μ ꡬννλ©΄ λ κΉ?
λ¬Όλ‘ λ°μ΄ν¬μ€νΈλΌ μκ³ λ¦¬μ¦μΌλ‘λ ν μ μλ€! νμ§λ§ μ’ λ κ΄μ°°ν΄λ³΄λ©΄, νμ¬ μμΉμμ μνμ’μ°λ‘ νμν λ μ₯μ λ¬Όμ΄ μλ€λ©΄ νν μΉ΄μ΄νΈ μ¦κ° μμ΄ μ΄λ κ°λ₯νκ³ , D λ§νΌ μν λΈ λμλ νν μΉ΄μ΄νΈ 1 μ¦κ°νλ©΄μ μ΄λνλ κ²μ μ μ μλ€.
(0κ³Ό 1... 0κ³Ό 1μ λ―Έλ‘κ° λ³΄μ¬)
κ·Έλ λ€ 0 - 1 bfsλ‘λ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€. μνμ’μ° νμν λμλ ν μΌμͺ½μ μΆκ°ν΄μ£Όκ³ , D μν λΈ λμλ ν μ€λ₯Έμͺ½μ μΆκ°ν΄μ£Όλ©° νμνλ©΄ λ ν¨μ¨μ μΈ μκ° λ³΅μ‘λλ‘ λ¬Έμ κ° ν΄κ²° κ°λ₯νλ€.
π» μ½λ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | from collections import deque import sys input = sys.stdin.readline n,m,d = map(int,input().split()) board = [list(input().rstrip()) for _ in range(n)] bomb = [[float('inf')] * m for _ in range(n)] bomb[0][0] = 0 queue = deque([(0,0,0)]) # cnt, y, x, board while queue: cnt, y, x = queue.popleft() if y==n-1 and x==m-1: break if bomb[y][x] < cnt: continue # μνμ’μ° νμ for dy,dx in ((0,-1), (0,1), (1,0), (-1,0)): ny,nx = y + dy, x + dx if ny < 0 or nx < 0 or ny >= n or nx >= m: continue if board[ny][nx] == '.' and bomb[y][x] < bomb[ny][nx]: bomb[ny][nx] = bomb[y][x] queue.appendleft((bomb[ny][nx], ny, nx)) # d μν λ°λ©° νμ for ddy,ddx in ((0,d), (0,-d), (-d,0), (d,0)): for i in range(-d+1, d): ny = y + ddy + (i if ddy == 0 else 0) nx = x + ddx + (i if ddx == 0 else 0) # λ²μ λμ΄κ° κ²½μ° κ²½κ³λ‘ μ€μ if ny < 0 or nx < 0 or ny >= n or nx >=m: ny = max(0, ny) nx = max(0, nx) ny = min(ny, n - 1) nx = min(nx, m - 1) if bomb[y][x] + 1 < bomb[ny][nx]: bomb[ny][nx] = bomb[y][x] + 1 queue.append((bomb[ny][nx], ny, nx)) print(bomb[n-1][m-1]) | cs |
π μνμ°©μ€
0-1 bfs: 1436 ms
λ°μ΄ν¬μ€νΈλΌ: 1768 ms
π λ¬Έμ λ§ν¬
'Problem Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 28357λ²: μ¬ν λλ μ£ΌκΈ° (1) | 2023.10.08 |
---|---|
[λ°±μ€] 5942λ²: Big Macs Around the World (0) | 2023.09.18 |
[λ°±μ€] 20560λ²: λ§μ§ νλ°© (1) | 2023.09.01 |
[λ°±μ€] 1185: μ λ½ μ¬ν (0) | 2023.08.24 |
[λ°±μ€] 28457λ²: Every? Only One's Marble - νμ΄μ¬ (0) | 2023.08.13 |