공부 자료/알고리즘

(Python/파이썬) 백준 2644번 - 촌수계산

뚜루뚜루세니 2021. 9. 10. 19:35
728x90

문제출처: https://www.acmicpc.net/problem/2644

 

2644번: 촌수계산

사람들은 1, 2, 3, …, n (1 ≤ n ≤ 100)의 연속된 번호로 각각 표시된다. 입력 파일의 첫째 줄에는 전체 사람의 수 n이 주어지고, 둘째 줄에는 촌수를 계산해야 하는 서로 다른 두 사람의 번호가 주어

www.acmicpc.net

1. 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from collections import deque
import sys
 
N= int(input()) #사람 수
a,b = map(int, input().split()) #촌 수 계산 두 번호
= int(input()) #관계 개수
 
graph = [ [] for i in range(N+1)] 
result=[0 for i in range(N + 1)] #결과 출력 리스트
 
def BFS(start): #시작부터 탐색
    q = deque()
    q.append(start)
    visited = [0 for i in range(N + 1)]
    visited[start] = 1
    while q:
        k = q.popleft()
        for i in graph[k]:
            if visited[i] == 0:
                visited[i] = 1
                result[i] = result[k] + 1
                q.append(i)
 
for i in range(M):
    x,y = map(int,input().split()) #부모 자식 관계 
    #양방향으로 값 넣어줌
    graph[x].append(y)
    graph[y].append(x)
 
BFS(a)
print(result[b] if result[b] != 0 else -1)
 
cs

2. 해결과정

bfs를 활용해서 그래프를 탐색하고, 현재 탐색하는 노드와 연결된 노드에 현재 노드 값의 +1을 한다. 즉, 연결된 노드를 이동하는 것을 의미한다.

노드들의 탐색을 마치면 찾고자 하는 노드의 인덱스 값을 출력

 

3. 느낀점

bfs dfs 문제는 유형을 잘 모르겠다. 많이 풀어봐야지...

728x90