π‘ 쑰건
- κ²μμ μ°Έμ¬νλ 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 ν΄μ€λ€.