[백준] 2644 - 촌수계산 (python 파이썬)

강민수·2022년 12월 28일

Algorithm-BACKJOON

목록 보기
18/55
post-thumbnail

백준 2644 문제 바로가기

풀이 코드

# 1차 오답 코드 - 틀렸습니다
n = int(input())  # 전체 사람의 수
a, b = map(int, input().split())  # 촌수를 계산해야 하는 두 사람
m = int(input())  # 부모 자식간의 관계 수

graph = [[] * n for _ in range(n + 1)]  # 2차원 배열 그래프 선언
visited = [0] * (n + 1)  # 방문했는지 확인을 위해
result = []

for i in range(m):  # 입력값들 추가
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)


def dfs(start):
    result.append(start)
    visited[start] = 1

    for d in graph[start]:
        if visited[d] == 0:
            dfs(d)


dfs(a)
if b not in result:
    print(-1)
elif b in result:
    print(result.index(b))

1차로 제출한 코드였는데 처음에 떠올린 방법은 result에 탐색한 곳들을 전부 append로 넣어주고 b가 안에 없다면 -1을 출력하고 존재한다면 b의 인덱스 값을 출력하려고 코드를 짜봤는데 오답이었다...
-> 아직 이유는 명확하게 모르기 때문에 이유를 아시는 분들은 알려주시면 감사하겠습니다!!

n = int(input())  # 전체 사람의 수
a, b = map(int, input().split())  # 촌수를 계산해야 하는 두 사람
m = int(input())  # 부모 자식간의 관계 수

graph = [[] * n for _ in range(n + 1)]  # 2차원 배열 그래프 선언
visited = [0] * (n + 1)  # 방문했는지 확인을 위해
result = []

for i in range(m):  # 입력값들 추가
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)


def dfs(start, cnt):
    cnt += 1
    visited[start] = 1

    if start == b:
        result.append(cnt)

    for d in graph[start]:
        if visited[d] == 0:
            dfs(d, cnt)


dfs(a, 0)
if len(result) == 0:
    print(-1)
else:
    print(result[0] - 1)

따라서 2차적으로 짜본 코드는 result에 방문한 곳을 추가하는게 아닌 횟수를 +1 해서 자식 번호가 등장했을때 append 해주도록 하고 밖으로 나와서 조건문을 통해 출력을 나눠주었더니 답이 맞았다 !

회고

아직 틀린 답에 대해서 명확하게 오답 풀이를 하지 못해서 주변 사람들이나 구글링을 좀 더 해보면서 헷갈리는 부분은 잡아나가야겠다!
아 그리고 이 문제도 백준 2606번 문제와 비슷한것 같았다 !

profile
능동적으로 개발 지식을 찾아다니는 백엔드 개발자입니다 😊 작성된 글에 대한 질문들 및 피드백은 언제나 환영입니다 :) 👌

0개의 댓글