https://www.acmicpc.net/problem/2644
촌수계산
부모-자식 관계는 1촌
더 멀어지는 경우 촌수가 늘어남
입력
첫 번째 줄 : n
n : 사람 수
두 번째 줄 : a, b
촌수를 구해야 하는 사람
세 번째 줄 : m
m : 부모 자식 관계 수
나머지 줄 : m개의 부모 자식 관계
출력
두 사람의 촌수를 출력
촌수를 나타낼 수 없으면 -1
어제 풀었던 바이러스와 다르게 촌수계산은 a라는 노드와 b라는 노드가 얼마나 떨어져 있는지를 계산해야 합니다.
따라서 그래프를 순회하면서 시작 정점으로부터 얼만큼 떨어져 있는지를 매개변수로 추가하여 문제를 해결하였습니다.
def dfs(num, dis):
global b, ans
v[num] = True
for nxt in graph[num]:
if v[nxt] == True:
continue
if nxt == b:
ans = dis
return
dfs(nxt, dis + 1)
n = int(input())
a, b = list(map(int, input().split()))
m = int(input())
graph = [[] for _ in range(n + 1)]
v = [False] * (n + 1)
for _ in range(m):
c, d = list(map(int, input().split()))
graph[c].append(d)
graph[d].append(c)
ans = -1
dfs(a, 1)
print(ans)
~~
해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.
혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다!
python source : https://github.com/ssh5212/conding-test-practice
java source : https://github.com/ssh5212/coding-test-java
[Softeer/소프티어] 나무 섭지 (Lv3 / BFS) - Python (0) | 2024.06.29 |
---|---|
[BOJ / 백준] 15971 두 로봇 (G4^ / DFS) - Python (0) | 2024.06.28 |
[BOJ / 백준] 2606 바이러스 (S3 / DFS) - Python (0) | 2024.06.26 |
[BOJ / 백준] 1407 2로 몇 번 나누어질까 (G4^ / 수학) - Python (0) | 2024.06.24 |
[BOJ / 백준] 2725 보이는 점의 개수 (S2^ / 수학) - Python (0) | 2024.06.23 |