ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 17204 죽음의 κ²Œμž„ with Python
    PS 2022. 5. 19. 01:04
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 17204 죽음의 κ²Œμž„

    πŸ’‘ 쑰건

    1. κ²Œμž„μ— μ°Έμ—¬ν•˜λŠ” Nλͺ…μ˜ μ‚¬λžŒλ“€μ€ 원탁에 λ‘˜λŸ¬μ•‰κ²Œ λœλ‹€.
      N(3 ≀ N ≀ 150)
    1. κ²Œμž„μ„ μ‹œμž‘ν•˜λŠ” μ‚¬λžŒμ€ 0번, κ·Έ 였λ₯Έμͺ½ μ‚¬λžŒμ€ 1번, κ·Έ 였λ₯Έμͺ½μ€ 2번, N-1번의 였λ₯Έμͺ½ μ‚¬λžŒμ€ λ‹€μ‹œ 0번이 λœλ‹€.
    1. κ²Œμž„ μ°Έμ—¬μžλ“€κ°„μ— 지λͺ©μ„ μ™„λ£Œν•œ μƒνƒœκ°€ μ£Όμ–΄μ§ˆλ•Œ, 보성이가 벌주λ₯Ό λ§ˆμ‹œκΈ° μœ„ν•΄ 둝 ν•˜μž.
      μ˜κΈ°κ°€ λΆˆλŸ¬μ•Ό ν•˜λŠ” κ°€μž₯ μž‘μ€ μ–‘μ˜ μ •μˆ˜ M을 보성이 λͺ°λž˜ 귀띔해 주도둝 ν•˜μž.
      λ³΄μ„±μ΄μ˜ 번호 K(1 ≀ K ≀ N - 1)
    1. κΉ€μ˜κΈ°λŠ” κ²Œμž„μ„ μ œμ•ˆν•˜μ˜€κΈ°μ— μžμ—°μŠ€λŸ½κ²Œ 0번이 λœλ‹€.
    1. N쀄에 걸쳐 i(0 ≀ i ≀ N - 1)번 μ‚¬λžŒμ΄ 지λͺ©ν•˜λŠ” μ‚¬λžŒμ˜ 번호 ai(0 ≀ ai ≀ N - 1)κ°€ 주어진닀.
      자기 μžμ‹ μ„ 지λͺ©ν•˜λŠ” κ²½μš°λ„ μ‘΄μž¬ν•  수 μžˆλ‹€.
      μ˜κΈ°κ°€ 말해야 ν•˜λŠ” κ°€μž₯ μž‘μ€ μ–‘μ˜ μ •μˆ˜ M을 좜λ ₯ν•œλ‹€. λ§Œμ•½ μ–΄λ–€ λ°©λ²•μœΌλ‘œλ„ 보성이가 걸리지 μ•ŠλŠ”λ‹€λ©΄ -1을 좜λ ₯ν•œλ‹€.
    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

    ⌨️ 문제 풀이

    1. N쀄에 걸쳐 i번 μ‚¬λžŒμ΄ 지λͺ©ν•˜λŠ” μ‚¬λžŒμ˜ 번호λ₯Ό μž…λ ₯λ°›μ•„ κ·Έλž˜ν”„λ₯Ό λ§Œλ“€μ–΄μ€€λ‹€.
    1. BFS μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 μˆœνšŒν•  것인데 κ²Œμž„μ„ μ œν•œν•˜κ³  μ‹œμž‘ν•œ μ‚¬λžŒμ€ 0번이기 λ•Œλ¬Έμ— 0λ²ˆλΆ€ν„° μ‹œμž‘μ„ ν•΄μ„œ K번이 지λͺ©λ˜λŠ” 숫자λ₯Ό μ„Έμ–΄ μ£Όλ©΄ λœλ‹€.
    1. Queue μ—λŠ” λͺ‡λ²ˆμ§Έλ‘œ 지λͺ©λ˜μ—ˆλŠ”지, 지λͺ©λœ μ‚¬λžŒμ΄ λˆ„κ΅¬μΈμ§€μ— λŒ€ν•œ 데이터λ₯Ό λ„£μ–΄μ€€λ‹€.
    1. BFSλ₯Ό μœ„ν•΄ λ§Œλ“€μ–΄ λ‘” Queueμ—μ„œ μ›μ†Œλ₯Ό λ½‘μ•˜μ„ λ•Œ, K번이라면 numberλ₯Ό 리턴해쀀닀.
    1. λ§Œμ•½ BFS 둜 κ·Έλž˜ν”„λ₯Ό μˆœνšŒν•˜λ©΄μ„œ Kλ₯Ό 지λͺ©ν•  수 μ—†λ‹€λ©΄ -1을 return ν•΄μ€€λ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.