βοΈ λ¬Έμ
https://www.acmicpc.net/problem/7562
체μ€ν μμ ν λμ΄νΈκ° λμ¬μ Έ μλ€. λμ΄νΈκ° ν λ²μ μ΄λν μ μλ μΉΈμ μλ κ·Έλ¦Όμ λμμλ€. λμ΄νΈκ° μ΄λνλ €κ³ νλ μΉΈμ΄ μ£Όμ΄μ§λ€. λμ΄νΈλ λͺ λ² μμ§μ΄λ©΄ μ΄ μΉΈμΌλ‘ μ΄λν μ μμκΉ?
π€ μ μΆλ ₯ μμ
π§ λμ΄λ/μμ μκ°
β λμ΄λ: solved.ac κΈ°μ€ S1
β μμ μκ°: 28λΆ 44μ΄
β κΆμ₯ μκ°: 1μκ°
π‘ νμ΄
1) λ¬Έμ μ ν νμ
λ¬Έμ μ μ£Όμ΄μ§ κ·Έλ¦Όκ³Ό μ΅μ μ΄λ νμλ₯Ό ꡬν΄μΌ νλ κ±Έ λ³΄κ³ BFSλ‘ νμ΄μΌκ² λ€κ³ μκ°νλ€.
2) μμ΄λμ΄ νλ¦
β λμ΄νΈκ° μμ§μΌ μ μλ λ°©ν₯ νν
μ§κΈκΉμ§ λ³Έ BFS λ¬Έμ λ€μ νμ λκ°λ₯Ό 2μ°¨μ 리μ€νΈ μμμ μμ§μ¬ λ΅μ μ°Ύλ λ°©μμ΄μλ€. μ΄ λ¬Έμ λ κ·Έ νμμ λ²μ΄λμ§ μμ§λ§ λ¨μν μνμ’μ°λ‘ μμ§μ΄λ κ² μλκΈ° λλ¬Έμ dx, dy λ°°μ΄μ λ§λ€ λ κ°μ μ μ λ ₯ν΄μ£Όλ κ² μ€μνλ€.
μ΄ μ¬λ λ°©ν₯μΌλ‘ μμ§μΌ μ μκ³ μ΄λ κ°λ₯ν λ°©ν₯μ (-2, -1, 1, 2)λ₯Ό μ‘°ν©ν΄ ννν μ μλ€.
β‘ μ΄λ νμ κ³μ°
β move λ³μ νμ©
첫 λ²μ§Έ μλλ μ΄λ νμλ₯Ό μ μ₯νκΈ° μν λ³μ 'move'λ₯Ό 0μΌλ‘ μ΄κΈ°ννκ³ μ²΄μ€ν μμ μμ μλ μΉΈμ λν΄ νΉμ μΉΈμ΄ μμ§ λ°©λ¬Ένμ§ μμ μνμΌ λλ§λ€ move += 1μ μννλ κ²μ΄μλ€.
μ΄ λ°©μμ μ°λκΉ μ΅μ μ΄λ νμλ₯Ό ꡬν μκ° μμλ€. μ½λμμ μλ μμΉμ printλ¬Έμ μΆκ°νκ³ μ΄λ νμκ° μ΄λ»κ² μΆλ ₯λλμ§ νμΈν΄λ΄€λ€.
μμ μ’νλ₯Ό (0, 0) / λͺ©ν μ’νλ₯Ό (7, 0)μΌλ‘ μ£Όκ³ μ½λλ₯Ό λλ¦° ν μμλλ‘ μΆλ ₯λ μΈ μ€μ΄λ€. λ λ²μ§Έ μ€μ 보면 (0, 0)μμ (2, 1)μ λμ΄νΈμ μμ§μ νΉμ±μ ν λ² λ§μ κ° μ μμμλ λΆκ΅¬νκ³ μ΄λ νμλ 2λ²μΌλ‘ λμ€κ³ μλ€. μΈ λ²μ§Έ κ²½μ°λ λ§μ°¬κ°μ§!
μΆλ°μ μ’νλ₯Ό (x, y)λΌκ³ ν λ (x+dx[i], y+dy[i])κΉμ§μ μ΅μ μ΄λ νμλ 맨 μ²μ μΆλ° μ’νμμλΆν° λμ μΌλ‘ ꡬνλ κ² μλλΌ (x, y)λ₯Ό κΈ°μ€μΌλ‘ μ²λ¦¬νλ κ³Όμ μ΄ νμν΄λ³΄μΈλ€.
β visited 리μ€νΈ νμ©
첫 λ²μ§Έ μλμμ νμ ν λ¬Έμ μ μ ν΄κ²°νκΈ° μν΄ visited 리μ€νΈμ νμμ μ΄μ§ λ³ννλ€. 2μ°¨μ 리μ€νΈ νμμΈ κ±΄ λμΌνμ§λ§ λͺ¨λ κ°μ 0μΌλ‘ μ΄κΈ°ννκ³ iν jμ΄μλ μμμ μμ iν jμ΄κΉμ§ μ€κΈ° μν΄ νμν μ΅μ μ΄λ νμλ₯Ό μ μ₯ν΄μ£Όλ κ²μ΄λ€.
μ΄ λ μμμ μμ μμμ κΉμ§λ μ΄λν νμκ° μμ§λ§ ꡬν νΈμλ₯Ό μν΄ visited[μμμ x μ’ν][μμμ y μ’ν] κ°μ 1λ‘ μ΄κΈ°ννλ€.
μ΄ λ°©μμ μ΄μ©νλ€λ©΄ (x, y)μμ (x+dx[i], y+dy[i])κΉμ§ μ€κΈ° μν μ΅μ μ΄λ νμλ visited[x+dx[i]][y+dy[i]] = visited[x][y]+1λ‘ ννν μ μλ€.
β’ μ λ΅ μΆλ ₯
μΆλ°μ μ μ΄κΈ° κ°μ΄ 1μ΄μκΈ° λλ¬Έμ μ λ΅μ ꡬν λλ visited[νκ² x μ’ν][νκ² y μ’ν]-1λ‘ κ³μ°ν΄μ€μΌ νλ€.
3) ꡬν
from collections import deque
T = int(input())
for _ in range(T):
L = int(input())
s_x, s_y = map(int, input().split())
t_x, t_y = map(int, input().split())
queue = deque([(s_x, s_y)])
visited = [[0]*(L+1) for _ in range(L+1)]
visited[s_x][s_y] = 1
dx = [-2, -2, -1, -1, 1, 1, 2, 2]
dy = [-1, 1, -2, 2, -2, 2, -1, 1]
while queue:
r, c = queue.popleft()
if r == t_x and c == t_y:
break
for i in range(8):
nr, nc = r+dx[i], c+dy[i]
if (0 <= nr < L and 0 <= nc < L) and not visited[nr][nc]:
visited[nr][nc] = visited[r][c]+1
queue.append((nr, nc))
print(visited[t_x][t_y]-1)
4) μ΄λ €μ λ μ /λ°°μ΄ μ
π¨ μ΄λ €μ λ μ
- μ²μμ μ΄λ νμλ₯Ό μΉ΄μ΄νΈ νλ λΆλΆμμ μ‘°κΈ νλ€λ¦¬ μ§κΈ΄ νμ§λ§ κΈλ°© μμ νκ³ κ·Έ μΈμ μ΄λ €μ΄ μ μ μμλ€.
β λ°°μ΄ μ
- μ€λμ λ°°μ΄ μ μ΄λΌκΈ°λ³΄λ€ κ·Έλ₯ λ΄ μκ° μ 리? - λ€λ₯Έ μ νμ λ¬Έμ λ³΄λ€ BFS/DFS λ¬Έμ TILμ μμ±ν λ λ΄κ° μ΄ν΄ν κ² λ§λ? μ΄λ κ² νννλ©΄ λ€λ₯Έ μ¬λλ€μ΄ μ μμ λ€μ μ μμκΉ? νλ μκ°μ΄ μ λ λ§μ΄ λ λ€. λ¬Έμ λ₯Ό λ§μ΄ νμ΄λ³΄κ³ , νμ΄λ₯Ό λ§μ΄ μ μ΄λ³΄λ λ°©λ² λ°μλ μκ² μ§ π₯
'Problem Solving > [νν΄99] TIL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
99ν΄λ½ μ½ν μ€ν°λ 11μΌμ°¨ TIL / DFS(κΉμ΄ μ°μ νμ) (6) | 2024.11.07 |
---|---|
99ν΄λ½ μ½ν μ€ν°λ 10μΌμ°¨ TIL / BFS(λλΉ μ°μ νμ) (2) | 2024.11.06 |
99ν΄λ½ μ½ν μ€ν°λ 8μΌμ°¨ TIL / DFS(κΉμ΄ μ°μ νμ) (0) | 2024.11.04 |
99ν΄λ½ μ½ν μ€ν°λ 7μΌμ°¨ TIL / μμ νμ (0) | 2024.11.03 |
99ν΄λ½ μ½ν μ€ν°λ 6μΌμ°¨ TIL / μ΄λΆ νμ (0) | 2024.11.03 |