-
[λ°±μ€] 17204 μ£½μμ κ²μ with PythonPS 2022. 5. 19. 01:04728x90λ°μν
π BOJ 17204 μ£½μμ κ²μ
π‘ 쑰건
- κ²μμ μ°Έμ¬νλ Nλͺ
μ μ¬λλ€μ μνμ λλ¬μκ² λλ€.
N(3 β€ N β€ 150)
- κ²μμ μμνλ μ¬λμ 0λ², κ·Έ μ€λ₯Έμͺ½ μ¬λμ 1λ², κ·Έ μ€λ₯Έμͺ½μ 2λ², N-1λ²μ μ€λ₯Έμͺ½ μ¬λμ λ€μ 0λ²μ΄ λλ€.
- κ²μ μ°Έμ¬μλ€κ°μ μ§λͺ©μ μλ£ν μνκ° μ£Όμ΄μ§λ, 보μ±μ΄κ° λ²μ£Όλ₯Ό λ§μκΈ° μν΄ λ‘ νμ.
μκΈ°κ° λΆλ¬μΌ νλ κ°μ₯ μμ μμ μ μ Mμ 보μ±μ΄ λͺ°λ κ·λν΄ μ£Όλλ‘ νμ.
보μ±μ΄μ λ²νΈ K(1 β€ K β€ N - 1)
- κΉμκΈ°λ κ²μμ μ μνμκΈ°μ μμ°μ€λ½κ² 0λ²μ΄ λλ€.
- Nμ€μ κ±Έμ³ i(0 β€ i β€ N - 1)λ² μ¬λμ΄ μ§λͺ©νλ μ¬λμ λ²νΈ ai(0 β€ ai β€ N - 1)κ° μ£Όμ΄μ§λ€.
μκΈ° μμ μ μ§λͺ©νλ κ²½μ°λ μ‘΄μ¬ν μ μλ€.
μκΈ°κ° λ§ν΄μΌ νλ κ°μ₯ μμ μμ μ μ Mμ μΆλ ₯νλ€. λ§μ½ μ΄λ€ λ°©λ²μΌλ‘λ 보μ±μ΄κ° κ±Έλ¦¬μ§ μλλ€λ©΄ -1μ μΆλ ₯νλ€.
- BFS, κ·Έλννμ μ νμ λ¬Έμ
π₯ μμ€ μ½λ
from collections import deque from sys import stdin n, m = map(int, stdin.readline().split()) arr = [[] for _ in range(n + 1)] for i in range(n): arr[i].append(int(stdin.readline())) def solve(x): q = deque() q.append((0, x)) visited = set() while q: number, x = q.popleft() if number > n and m not in visited: return -1 if x == m: return number if arr[x][0]: q.append((number + 1, arr[x][0])) return -1 print(solve(0))
π μμ λ° μ€νκ²°κ³Ό
μμ
5 3 1 3 2 1 4
μ€νκ²°κ³Ό
2
β¨οΈ λ¬Έμ νμ΄
- Nμ€μ κ±Έμ³ iλ² μ¬λμ΄ μ§λͺ©νλ μ¬λμ λ²νΈλ₯Ό μ λ ₯λ°μ κ·Έλνλ₯Ό λ§λ€μ΄μ€λ€.
- BFS μκ³ λ¦¬μ¦μ ν΅ν΄ μνν κ²μΈλ° κ²μμ μ ννκ³ μμν μ¬λμ 0λ²μ΄κΈ° λλ¬Έμ 0λ²λΆν° μμμ ν΄μ Kλ²μ΄ μ§λͺ©λλ μ«μλ₯Ό μΈμ΄ μ£Όλ©΄ λλ€.
- Queue μλ λͺλ²μ§Έλ‘ μ§λͺ©λμλμ§, μ§λͺ©λ μ¬λμ΄ λꡬμΈμ§μ λν λ°μ΄ν°λ₯Ό λ£μ΄μ€λ€.
- BFSλ₯Ό μν΄ λ§λ€μ΄ λ Queueμμ μμλ₯Ό λ½μμ λ, Kλ²μ΄λΌλ©΄ numberλ₯Ό 리ν΄ν΄μ€λ€.
- λ§μ½ BFS λ‘ κ·Έλνλ₯Ό μννλ©΄μ Kλ₯Ό μ§λͺ©ν μ μλ€λ©΄ -1μ return ν΄μ€λ€.
λ°μν'PS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
- κ²μμ μ°Έμ¬νλ Nλͺ
μ μ¬λλ€μ μνμ λλ¬μκ² λλ€.