난이도 : D3
문제번호 : 5248
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
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 |
댓글