[백준] 2644 촌수계산 (python)

고쥐·2024년 8월 8일
  • DFS 시도 (풀이 1) - 배열을 사용하여 출력하기
n = int(input())
p1, p2 = map(int, input().split())  # 부모, 자식
m = int(input())

result_arr = []

graph = [[] for _ in range(n+1)]
visited = [False]*(n+1)

for _ in range(m):
    a,b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(start, depth):
    visited[start] = True

    if start == p2:  # 자식 정점에 도달하면
        result_arr.append(depth)

    for i in graph[start]:
        if not visited[i]:
            dfs(i, depth+1)

dfs(p1, 0)

if len(result_arr) == 0:
    print(-1)
else:
    print(result_arr[0])  # 목표 정점에 처음 도달했을 때의 경로 깊이
  • DFS 시도 (풀이 2) - 변수를 사용하여 출력하기
n = int(input())
p1, p2 = map(int, input().split())  # 부모, 자식
m = int(input())

result_depth = -1

graph = [[] for _ in range(n + 1)]
visited = [False] * (n + 1)

for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    graph[b].append(a)

def dfs(start, depth):
    global result_depth  # 함수 외부의 result_depth 변수를 사용하기 위해 global 선언
    visited[start] = True

    if start == p2:  # 목표 정점에 도달하면
        result_depth = depth
        return

    for i in graph[start]:
        if not visited[i]:
            dfs(i, depth + 1)

dfs(p1, 0)

if result_depth == -1:  # 목표 정점에 도달하지 못한 경우
    print(-1)
else:
    print(result_depth)  # 목표 정점에 처음 도달했을 때의 경로 깊이

실행 결과

profile
미래의 고쥐를 위한 아하모먼트 기록 🥔

0개의 댓글