728x90
문제

상근이는 겨울방학을 맞아 N개국을 여행하면서 자아를 찾기로 마음먹었다.

하지만 상근이는 새로운 비행기를 무서워하기 때문에, 최대한 적은 종류의 비행기를 타고 국가들을 이동하려고 한다.

이번 방학 동안의 비행 스케줄이 주어졌을 때, 상근이가 가장 적은 종류의 비행기를 타고 모든 국가들을 여행할 수 있도록 도와주자.

상근이가 한 국가에서 다른 국가로 이동할 때 다른 국가를 거쳐 가도(심지어 이미 방문한 국가라도) 된다.

 

입력

첫 번째 줄에는 테스트 케이스의 수 T(T ≤ 100)가 주어지고,

각 테스트 케이스마다 다음과 같은 정보가 주어진다.

  • 첫 번째 줄에는 국가의 수 N(2 ≤ N ≤ 1 000)과 비행기의 종류 M(1 ≤ M ≤ 10 000) 가 주어진다.
  • 이후 M개의 줄에 a와 b 쌍들이 입력된다. a와 b를 왕복하는 비행기가 있다는 것을 의미한다. (1 ≤ a, b ≤ n; a ≠ b) 
  • 주어지는 비행 스케줄은 항상 연결 그래프를 이룬다.
출력

테스트 케이스마다 한 줄을 출력한다.

  • 상근이가 모든 국가를 여행하기 위해 타야 하는 비행기 종류의 최소 개수를 출력한다.
예제 입력
2
3 3
1 2
2 3
1 3
5 4
2 1
2 3
4 3
4 5
예제 출력
2
4
코드 및 설명
import sys
input=sys.stdin.readline

t=int(input())

for i in range(t):
    n,m=map(int,input().split())
    for j in range(m):
        input()
    print(n-1)

트리 문제이지만 어떤 특징을 가지는지 이해하고 풀게 되면 가장 쉬운 문제라고 할 수 있을 것 같다.

처음에 이 문제를 보았을 때 어떻게 풀어야 하는지 감이 안왔는데 이해하고 나니 코드가 바로 짜질 정도였다.

 

이 문제에서 주목해야 할 것이 연결 그래프라는 사실이다.

그래프 문제이기도 한데 연결그래프는 모든 모드가 연결되어 있다는 것을 의미한다.

 

여기서 최소로 비행기를 타고 이동한다는 의미는 국가를 한번씩 거쳐가면 된다는 의미로 해석하면 된다.

왕복 하고, 중복으로도 갈 수 있지만 결국 이 문제에서 원하는 것은 최소의 경우다.

 

그렇기에 연결리스트에서 각 Node 연결 정보가 주어지더라도 결과값에 사용하지 않아도 된다는 것이다.

그래서 input()으로만 받고 따로 저장하지 않았다.

 

그리고 n,m으로 입력 받은 것 중에 방문할 나라의 수보다 한번만 적으면 Edge의 개수(방문한 경로)가 되므로 이를 이용해 출력해주었다.

728x90

'Python > Baekjoon' 카테고리의 다른 글

[Python] 백준 1065 트리  (0) 2022.09.15
[Python] 백준 10815 숫자카드  (0) 2022.09.06
[Python] 백준 13305 주유소  (0) 2022.09.03
[Python] 백준 10828 스택  (0) 2022.07.29
[Python] 백준 1920 수찾기  (0) 2022.07.07

+ Recent posts