반응형
https://www.acmicpc.net/problem/2644
2644번: 촌수계산
사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어
www.acmicpc.net
n = int(input())
start, target = map(int, input().split())
m = int(input())
graph = {i : [] for i in range(1, n+1)}
for _ in range(m):
p, c = map(int, input().split())
graph[p].append(c)
graph[c].append(p)
visited ={node : False for node in graph}
result = []
def dfs(v, count):
if v == target:
result.append(count)
count += 1
visited[v] = True
nodes = graph[v]
for node in nodes:
if not visited[node]:
dfs(node, count)
dfs(start, 0)
if len(result) == 0:
print(-1)
else:
print(result[0])
저는dfs
로 문제를 해결하였습니다.
먼저 주어진 예제를 활용하여 graph
는 아래와 같습니다.
첫번째 예제에서 시작노드은 7
, 마지막노드은 3
입니다.
아래과 같이 두사람의 촌수를 확인하려면 시작노드부터 마지막노드까지의 그래프의 깊이를 확인하면 됩니다.
작성한 dfs
함수를 확인해보면 count
변수로 그래프가 깊어질수록 count
를 증가시키는 것을 볼 수 있습니다.
그리고 현재노드 v
가 마지막노드 target
가 같아진다면 result
리스트에 현재까지의 그래프의 깊이 count
를 저장합니다.
두 사람의 관계가 있다면 result
의 크기가 0이 아닐것입니다.
하지만 두사람의 관계가 없다면 그래프는 다음과 같을 것이며 result
의 크기가 0
일것입니다.
- 두사람의 관계가 없는 경우가 바로 두번째 예제입니다. 시작노드
8
, 마지막노드6
입니다.
따라서 result
의 크기가 0이라면 -1
을 반환하고 result
의 크기가 0이 아니라면 저장되어있는 result[0]
(count
)를 반환합니다.
반응형
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 뒤에 있는 큰 수 찾기 파이썬(Python) (0) | 2023.02.07 |
---|---|
[코딩테스트] 프로그래머스 기능개발 파이썬(Python) (0) | 2023.02.06 |
[코딩테스트] 프로그래머스 [1차] 다트 게임 파이썬(Python) (0) | 2023.02.01 |
[코딩테스트] 프로그래머스 [카카오 인턴] 키패드 누르기 파이썬(Python) (0) | 2023.01.31 |
[코딩테스트] 프로그래머스 무인도 여행 파이썬(Python) (0) | 2023.01.30 |