λ¬Έμ μ€λͺ
ROR κ²μμ λ νμΌλ‘ λλμ΄μ μ§ννλ©°, μλ ν μ§μμ λ¨Όμ νκ΄΄νλ©΄ μ΄κΈ°λ κ²μμ λλ€. λ°λΌμ, κ° νμ μλ ν μ§μμ μ΅λν 빨리 λμ°©νλ κ²μ΄ μ 리ν©λλ€.
μ§κΈλΆν° λΉμ μ ν νμ νμμ΄ λμ΄ κ²μμ μ§ννλ €κ³ ν©λλ€. λ€μμ 5 x 5 ν¬κΈ°μ 맡μ, λΉμ μ μΊλ¦ν°κ° (ν: 1, μ΄: 1) μμΉμ μκ³ , μλ ν μ§μμ (ν: 5, μ΄: 5) μμΉμ μλ κ²½μ°μ μμμ λλ€.
μ κ·Έλ¦Όμμ κ²μμ λΆλΆμ λ²½μΌλ‘ λ§νμμ΄ κ° μ μλ κΈΈμ΄λ©°, ν°μ λΆλΆμ κ° μ μλ κΈΈμ
λλ€. μΊλ¦ν°κ° μμ§μΌ λλ λ, μ, λ¨, λΆ λ°©ν₯μΌλ‘ ν μΉΈμ© μ΄λνλ©°, κ²μ 맡μ λ²μ΄λ κΈΈμ κ° μ μμ΅λλ€.
μλ μμλ μΊλ¦ν°κ° μλ ν μ§μμΌλ‘ κ°λ λ κ°μ§ λ°©λ²μ λνλ΄κ³ μμ΅λλ€.
- 첫 λ²μ§Έ λ°©λ²μ 11κ°μ μΉΈμ μ§λμ μλ ν μ§μμ λμ°©νμ΅λλ€.
- λ λ²μ§Έ λ°©λ²μ 15κ°μ μΉΈμ μ§λμ μλν μ§μμ λμ°©νμ΅λλ€.
μ μμμμλ 첫 λ²μ§Έ λ°©λ²λ³΄λ€ λ λΉ λ₯΄κ² μλν μ§μμ λμ°©νλ λ°©λ²μ μμΌλ―λ‘, μ΄ λ°©λ²μ΄ μλ ν μ§μμΌλ‘ κ°λ κ°μ₯ λΉ λ₯Έ λ°©λ²μ λλ€.
λ§μ½, μλ νμ΄ μμ μ ν μ§μ μ£Όμμ λ²½μ μΈμλμλ€λ©΄ μλ ν μ§μμ λμ°©νμ§ λͺ»ν μλ μμ΅λλ€. μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ κ²½μ°μ λΉμ μ μΊλ¦ν°λ μλ ν μ§μμ λμ°©ν μ μμ΅λλ€.
κ²μ 맡μ μν mapsκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μΊλ¦ν°κ° μλ ν μ§μμ λμ°©νκΈ° μν΄μ μ§λκ°μΌ νλ μΉΈμ κ°μμ μ΅μκ°μ return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ. λ¨, μλ ν μ§μμ λμ°©ν μ μμ λλ -1μ return ν΄μ£ΌμΈμ.
μ νμ¬ν
- mapsλ n x m ν¬κΈ°μ κ²μ 맡μ μνκ° λ€μ΄μλ 2μ°¨μ λ°°μ΄λ‘, nκ³Ό mμ κ°κ° 1 μ΄μ 100 μ΄νμ μμ°μμ
λλ€.
- nκ³Ό mμ μλ‘ κ°μ μλ, λ€λ₯Ό μλ μμ§λ§, nκ³Ό mμ΄ λͺ¨λ 1μΈ κ²½μ°λ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
- mapsλ 0κ³Ό 1λ‘λ§ μ΄λ£¨μ΄μ Έ μμΌλ©°, 0μ λ²½μ΄ μλ μ리, 1μ λ²½μ΄ μλ μ리λ₯Ό λνλ λλ€.
- μ²μμ μΊλ¦ν°λ κ²μ 맡μ μ’μΈ‘ μλ¨μΈ (1, 1) μμΉμ μμΌλ©°, μλλ°© μ§μμ κ²μ 맡μ μ°μΈ‘ νλ¨μΈ (n, m) μμΉμ μμ΅λλ€.
μ μΆλ ₯ μ
μ
μΆλ ₯ μ #1
μ£Όμ΄μ§ λ°μ΄ν°λ λ€μκ³Ό κ°μ΅λλ€.
μΊλ¦ν°κ° μ νμ μ§μκΉμ§ μ΄λνλ κ°μ₯ λΉ λ₯Έ κΈΈμ λ€μ κ·Έλ¦Όκ³Ό κ°μ΅λλ€.
λ°λΌμ μ΄ 11μΉΈμ μΊλ¦ν°κ° μ§λκ°μΌλ―λ‘ 11μ return νλ©΄ λ©λλ€.
μ
μΆλ ₯ μ #2
λ¬Έμ μ μμμ κ°μΌλ©°, μλ ν μ§μμ λλ¬ν λ°©λ²μ΄ μμ΅λλ€. λ°λΌμ -1μ return ν©λλ€.
νμ΄ μ½λ
from collections import deque
def bfs(maps):
cnt = 1
queue = deque()
max_x = len(maps)
max_y = len(maps[0])
queue.append([max_x-1, max_y-1, cnt])
maps[max_x-1][max_y-1] = 0
dx = [-1, 0, 1, 0]
dy = [0, -1, 0, 1]
while queue:
x, y, cnt = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx == 0 and ny == 0:
return cnt + 1
if 0 <= nx < max_x and 0 <= ny < max_y:
if maps[nx][ny] != 0:
maps[nx][ny] = 0
queue.append([nx, ny, cnt+1])
return -1
def solution(maps):
answer = bfs(maps)
return answer
BFSλ‘ νμ΄νλ€.
ν¨μ¨μ± ν΅κ³Όμμ μ λ₯Ό λ¨Ήμλλ°, μ΄ κ³Όμ μμ μλ‘μ΄ μ§μμ μ»μλ€!
λ°±μ€ νλ ν°λμ μ°μμμ§λ§, μ€λ BFS κ΄λ ¨ μ²μ μμλΈ μ¬μ€μ΄ μλ κ²μ μμ§λ λ©μλ€λ μκ°μ΄ λ λ€.
ν¨μ¨μ±μ ν΅κ³Όνκ² ν΄μ€ ν€λ,
λ°©λ¬Έ μ¬λΆλ₯Ό νμμ κΊΌλΈ λ€μ 체ν¬λ₯Ό ν κΉ vs λ°©λ¬Έ μ¬λΆλ₯Ό νμ μ§μ΄ λ£μΌλ©΄μ 체ν¬λ₯Ό ν κΉμ λ Όμμ΄λ€.
νμμ κΈ°μ‘΄ μ½λ© μ€νμΌμ λ°©λ¬Έ μ¬λΆλ₯Ό νμμ κΊΌλΈ λ€μ 체ν¬λ₯Ό ν΄μ€¬λλ°, μ΄ μ μ΄ ν¨μ¨μ±μ ν΅κ³Όνμ§ λͺ»νκ² λ§λ€μλ€.
ν¨μ¨μ±λ©΄μμ λ€μ³μ§λ μ΄μ λ, κΊΌλΌ λ λ°©λ¬Έ μ²λ¦¬λ₯Ό νλ©΄, μ΄λ―Έ ν λ΄λΆμ λ€μ΄κ° λΈλμ λ λ£μ μ μκΈ° λλ¬Έμ΄λ€.
μ΄ κ·Έλ¦Όμ 보μ. 10(1)κ³Ό 10(2)λ₯Ό μ§μ€μ μΌλ‘ νμΈν΄λ³΄μ.
ν λ΄λΆμ [10(1), 10(2)]κ° μλ€.
10(1)μ΄ λΉ μ Έλμ€κ³ , 10(1)μ λν΄ λ°©λ¬Έ 체ν¬λ₯Ό νκ³ , 11λ₯Ό νμ λ£λλ€.
κ·Έ λ€μ 10(2)κ° λΉ μ Έλμ€κ³ , 10(2)μ λν΄ λ°©λ¬Έ 체ν¬λ₯Ό νκ³ , 11μ λ€μ νμ λ λ£λλ€!
μ΄λ κ² μ€λ³΅λ λΈλμ΄ νμ μΆκ°λ‘ λ€μ΄κ°λ€λ μ μμ μκ° λ³΅μ‘λ μΈ‘λ©΄μμ λΆλ¦¬νλ€.
λ°©λ¬Έ μ¬λΆλ₯Ό νμ μ§μ΄ λ£μΌλ©΄μ 체ν¬λ₯Ό νλ κ²μ΄ BFS ꡬνν λ μλ μΈ‘λ©΄μμ μ 리ν μ μλ€!!
μκ° λ³΅μ‘λ κ³ μ³λ³΄κ² λ€κ³ κΈ°μ‘΄μ μλ‘ μμ±ν visited λ°°μ΄λ μμ κ³ , μ΅μ νλ λ°©ν₯λ λ§λ€μ΄λ³΄κ³ , (n, m)μμΉμμλ μμν΄λ΄€λλ° λͺ¨λ μ€ν¨νλ€ γ γ .. κ·Έλλ μ΄λ° μλ λμ μλ‘μ΄ μ¬μ€μ μμμ λΏλ―νλ€!
'π μ½λ©ν μ€νΈ λλΉ : PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€] 2κ° μ΄νλ‘ λ€λ₯Έ λΉνΈ (level2, python) (0) | 2022.09.19 |
---|---|
[νλ‘κ·Έλλ¨Έμ€] λ€λ¦¬λ₯Ό μ§λλ νΈλ (level2, python) (0) | 2022.09.19 |
[νλ‘κ·Έλλ¨Έμ€] λͺ¨μμ¬μ (level2, python) (1) | 2022.09.13 |
[νλ‘κ·Έλλ¨Έμ€] [3μ°¨] νμΌλͺ μ λ ¬ (level2, python) (0) | 2022.09.13 |
[νλ‘κ·Έλλ¨Έμ€] λ°©λ¬Έ κΈΈμ΄ (level2, python) (0) | 2022.09.13 |