[νλ‘κ·Έλλ¨Έμ€ | Python] κ²μ λ§΅ μ΅λ¨κ±°λ¦¬
π λ¬Έμ μ 보
- κ΄λ ¨ κ°λ : BFS
- λμ΄λ : Level 2
- λ¬Έμ λ§ν¬ : https://programmers.co.kr/learn/courses/30/lessons/1844
μ½λ©ν μ€νΈ μ°μ΅ - κ²μ λ§΅ μ΅λ¨κ±°λ¦¬
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1
programmers.co.kr
π λ¬Έμ μ€λͺ
λ¬Έμ μ€λͺ
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) μμΉμ μμ΅λλ€.
μ μΆλ ₯ μ
maps | answer |
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] | 11 |
[[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] | -1 |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
μ£Όμ΄μ§ λ°μ΄ν°λ λ€μκ³Ό κ°μ΅λλ€.

μΊλ¦ν°κ° μ νμ μ§μκΉμ§ μ΄λνλ κ°μ₯ λΉ λ₯Έ κΈΈμ λ€μ κ·Έλ¦Όκ³Ό κ°μ΅λλ€.

λ°λΌμ μ΄ 11μΉΈμ μΊλ¦ν°κ° μ§λκ°μΌλ―λ‘ 11μ return νλ©΄ λ©λλ€.
μ
μΆλ ₯ μ #2
λ¬Έμ μ μμμ κ°μΌλ©°, μλ ν μ§μμ λλ¬ν λ°©λ²μ΄ μμ΅λλ€. λ°λΌμ -1μ return ν©λλ€.
π λ¬Έμ νμ΄
νμ΄. BFS νμ©
BFSλ₯Ό νμ©ν νμ΄μ΄λ€.
from collections import deque
def solution(maps):
x, y = 0, 0
n, m = len(maps), len(maps[0])
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
queue = deque()
queue.append((x, y))
while queue:
x, y = queue.popleft()
for di in range(4):
nx = x + dx[di]
ny = y + dy[di]
if nx < n and ny < m and nx >= 0 and ny >= 0:
if maps[nx][ny] != 0:
if maps[nx][ny] == 1:
maps[nx][ny] = maps[x][y] + 1
queue.append((nx, ny))
if maps[n-1][m-1] in [0, 1]:
return -1
else:
return maps[n-1][m-1]
π‘ What I learned
μ΄λ² κΈ°νμ dfs, bfs λ΄μ©μ μ 리ν μ μμλ€. νΉν, μ΄μ λ μ λλ 'dfs μν΄'μ΄λ€ / 'bfs μν΄'μ΄λ€ λΌκ³ λ€ μ΄μΌκΈ° νλμ§ κΉ¨λ¬μλ€. λ€λ§ κ° μκ³ λ¦¬μ¦μ λμ± ν¨μ¨μ μΈ μκ³ λ¦¬μ¦μ μμΌλ λ λ€ μμ μμ¬λ‘ μ¬μ©ν μ€ μλ κ²μ΄ μ’κ² λ€.
λ¬Έμ λ₯Ό λ± λ³΄λ©΄ μ΄κ²μ΄ DFSμΈμ§ BFSμΈμ§ λ± μμ보λ μλͺ©μ΄ μκΈΈ λκΉμ§ νλ ¨μ΄ νμμ μ΄κ² λ€.
'Problem Solving > Programmers' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€ | Python] λ‘λμ μ΅κ³ μμμ μ΅μ μμ (0) | 2022.06.29 |
---|---|
[νλ‘κ·Έλλ¨Έμ€ | Python] νΌλ‘λ (0) | 2022.06.21 |
[νλ‘κ·Έλλ¨Έμ€ | Python] 3μ§λ² λ€μ§κΈ° (0) | 2022.06.20 |
[νλ‘κ·Έλλ¨Έμ€ | Python] ν€ν¨λ λλ₯΄κΈ° (0) | 2022.06.20 |
[νλ‘κ·Έλλ¨Έμ€ | Python] ν°μΌλͺ¬ (0) | 2022.06.20 |