난이도 : D3
문제번호 : 5248
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
수업에서 같은 조에 참여하고 싶은 사람끼리 두 사람의 출석 번호를 종이에 적어 제출하였다. 한 조의 인원에 제한을 두지 않았기 때문에, 한 사람이 여러 장의 종이를 제출하거나 여러 사람이 한 사람을 지목한 경우 모두 같은 조가 된다. 예를 들어 1번-2번, 1번-3번이 같은 조가 되고 싶다고 하면, 1-2-3번이 같은 조가 된다. 번호를 적지도 않고 다른 사람에게 지목되지도 않은 사람은 단독으로 조를 구성하게 된다. 1번부터 N번까지의 출석번호가 있고, M 장의 신청서가 제출되었을 때 전체 몇 개의 조가 만들어지는지 출력하는 프로그램을 만드시오. |
입력
첫 줄에 테스트 케이스의 개수가 주어지고, 다음 줄부터 테스트 케이스 별로 첫 줄에 N과 M, 다음 줄에 M 쌍의 번호가 주어진다. 2<=N<=100, 1<=M<=100 |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
3 5 2 1 2 3 4 5 3 1 2 2 3 4 5 7 4 2 3 4 5 4 6 7 4 |
#1 3 #2 2 #3 3 |
2. 문제풀이
문제를 보면 내가 어떤사람을 지목했을때 그사람이 조에 들어가있다면 그 조에 포함된다 입니다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#D3 5248 그룹 나누기
def get_parent(x):
if parent[x] != x: parent[x] = get_parent(parent[x])
return parent[x]
def union_parent(x, y):
a = get_parent(x)
b = get_parent(y)
if a > b: parent[a] = b
else: parent[b] = a
for t in range(int(input())):
N, M = map(int, input().split())
parent = [i for i in range(N+1)]
votes = list(map(int, input().split()))
for i in range(0, M*2, 2): union_parent(votes[i], votes[i+1])
answer = set()
for i in parent: answer.add(get_parent(i))
print('#{} {}'.format(t+1, len(answer)-1))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
석찬이의 받아쓰기 C++(SW Expert Academy, SWEA) (0) | 2020.05.27 |
---|---|
최소비용 Python(SW Expert Academy, SWEA) (0) | 2020.05.26 |
최소생산비용 Python(SW Expert Academy, SWEA) (0) | 2020.05.24 |
전기버스2 Python(SW Expert Academy, SWEA) (0) | 2020.05.23 |
베이비진 게임 Python(SW Expert Academy, SWEA) (0) | 2020.05.22 |
댓글