ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [λ°±μ€€] 2644 μ΄Œμˆ˜κ³„μ‚° with Python
    PS 2022. 6. 13. 23:56
    728x90
    λ°˜μ‘ν˜•

    πŸ“Œ BOJ 2644 μ΄Œμˆ˜κ³„μ‚°

    πŸ’‘ 쑰건

    1. 기본적으둜 λΆ€λͺ¨μ™€ μžμ‹ 사이λ₯Ό 1촌으둜 μ •μ˜ν•˜κ³  μ΄λ‘œλΆ€ν„° μ‚¬λžŒλ“€ κ°„μ˜ 촌수λ₯Ό κ³„μ‚°ν•œλ‹€.
    1. 아버지와 ν• μ•„λ²„μ§€λŠ” 각각 1촌으둜 λ‚˜μ™€ ν• μ•„λ²„μ§€λŠ” 2촌이 되고, 아버지 ν˜•μ œλ“€κ³Ό ν• μ•„λ²„μ§€λŠ” 1촌, λ‚˜μ™€ 아버지 ν˜•μ œλ“€κ³ΌλŠ” 3촌이 λœλ‹€.
    1. μ—¬λŸ¬ μ‚¬λžŒλ“€μ— λŒ€ν•œ λΆ€λͺ¨ μžμ‹λ“€ κ°„μ˜ 관계가 μ£Όμ–΄μ‘Œμ„ λ•Œ, 주어진 두 μ‚¬λžŒμ˜ 촌수λ₯Ό κ³„μ‚°ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.
    1. μ‚¬λžŒλ“€μ€ 1, 2, 3, …, n (1 ≀ n ≀ 100)의 μ—°μ†λœ 번호둜 각각 ν‘œμ‹œλœλ‹€.
      μž…λ ₯ 파일의 첫째 μ€„μ—λŠ” 전체 μ‚¬λžŒμ˜ 수 n이 주어지고, λ‘˜μ§Έ μ€„μ—λŠ” 촌수λ₯Ό 계산해야 ν•˜λŠ” μ„œλ‘œ λ‹€λ₯Έ 두 μ‚¬λžŒμ˜ λ²ˆν˜Έκ°€ 주어진닀.
    1. μ…‹μ§Έ μ€„μ—λŠ” λΆ€λͺ¨ μžμ‹λ“€ κ°„μ˜ κ΄€κ³„μ˜ 개수 m이 주어진닀.
      λ„·μ§Έ μ€„λΆ€ν„°λŠ” λΆ€λͺ¨ μžμ‹κ°„μ˜ 관계λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 두 번호 x,yκ°€ 각 쀄에 λ‚˜μ˜¨λ‹€. μ΄λ•Œ μ•žμ— λ‚˜μ˜€λŠ” 번호 xλŠ” 뒀에 λ‚˜μ˜€λŠ” μ •μˆ˜ y의 λΆ€λͺ¨ 번호λ₯Ό λ‚˜νƒ€λ‚Έλ‹€.
    1. 각 μ‚¬λžŒμ˜ λΆ€λͺ¨λŠ” μ΅œλŒ€ ν•œ λͺ…λ§Œ 주어진닀.
      μž…λ ₯μ—μ„œ μš”κ΅¬ν•œ 두 μ‚¬λžŒμ˜ 촌수λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€.
      μ–΄λ–€ κ²½μš°μ—λŠ” 두 μ‚¬λžŒμ˜ μΉœμ²™ 관계가 μ „ν˜€ μ—†μ–΄ 촌수λ₯Ό 계산할 수 없을 λ•Œκ°€ μžˆλ‹€. μ΄λ•Œμ—λŠ” -1을 좜λ ₯ν•΄μ•Ό ν•œλ‹€.
    1. BFS, κ·Έλž˜ν”„νƒμƒ‰ μœ ν˜•μ˜ 문제

    πŸ–₯ μ†ŒμŠ€ μ½”λ“œ

    from sys import stdin
    from collections import deque
    
    n = int(stdin.readline())
    a, b = map(int, stdin.readline().split())
    
    graph = [[] for _ in range(n + 1)]
    for _ in range(int(stdin.readline())):
        k, p = map(int, stdin.readline().split())
        graph[k].append(p)
        graph[p].append(k)
    
    
    def solve(x):
        q = deque()
        q.append((x, 0))
        visited = set()
        visited.add(x)
    
        while q:
            now, c = q.popleft()
    
            if now == b:
                return c
    
            for i in graph[now]:
                if i not in visited:
                    q.append((i, c + 1))
                    visited.add(i)
    
        return False
    
    
    ans = solve(a)
    print(ans) if ans else print(-1)

    πŸ”– 예제 및 μ‹€ν–‰κ²°κ³Ό

    예제

    9
    8 6
    7
    1 2
    1 3
    2 7
    2 8
    2 9
    4 5
    4 6

    μ‹€ν–‰κ²°κ³Ό

    -1

    ⌨️ 문제 풀이

    1. 촌수λ₯Ό κ³„μ‚°ν•˜μ—¬ λͺ‡ μ΄ŒμΈμ§€ 좜λ ₯ν•˜λ €κ³  ν•˜λŠ” 문제이기 λ•Œλ¬Έμ— κ·Έλž˜ν”„ νƒμƒ‰μœΌλ‘œ 풀이할 수 μžˆλ‹€.
    1. μš”κ΅¬ν•œ 두 μ‚¬λžŒμ˜ 촌수λ₯Ό κ΅¬ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— μ–‘λ°©ν–₯ κ·Έλž˜ν”„λ₯Ό λ§Œλ“€μ–΄ BFSλ₯Ό μ‚¬μš©ν•΄ 촌수λ₯Ό κ΅¬ν•˜κ³  좜λ ₯ν•˜λ©΄ λœλ‹€.
    1. BFS μ•Œκ³ λ¦¬μ¦˜μ„ 톡해 λ‚˜μ˜¨ 값이 False 라면 -1을 좜λ ₯ν•˜κ³  μ•„λ‹ˆλΌλ©΄ 결과값을 좜λ ₯ν•˜λ©΄ λœλ‹€.
    λ°˜μ‘ν˜•

    λŒ“κΈ€

Designed by Tistory.