-
BOJ 16562 친구비(Python 3)알고리즘/BOJ 2019. 2. 20. 14:18반응형
https://www.acmicpc.net/problem/16562
유니온 파인드를 공부하다가 정리할 필요가 있어서 글을 쓰게 되었다.
내 풀이 방법은 v,w의 값을 입력 받을 때
v의 친구비가 더 높으면 v의 루트를 w의 루트로 해두고, w의 친구비가 더 높으면 w의 루트를 v의 루트로 해두었다.
이렇게 해두면 1차적으로 값들이 끼리끼리 모이게 되고, 이 상태에서 for문을 이용해 각 학생의 루트를 다시 구해준다.
이러면 어떤 학생한테 돈을 줘야하는지 알 수 있으니 ans에 값을 더하면 된다.
-------------------------------------------------------------------------
틀린 부분 찾는데 쓰인 반례
5 4 100
1 2 3 4 5
1 5
4 2
2 3
4 5
답:1
10 9 1000
1 2 3 4 5 6 7 8 9 10
1 2
3 4
5 6
7 8
9 10
7 9
6 4
2 8
5 1
답 1
값을 넣어도 전부 제대로 구할 수 있는 코드인지 의심스러웠는데 생각해보면
- 연합끼리 일단 뭉쳐있게 구현함
- 무조건 값이 적은 곳으로 뿌리를 저장해두었다.
- for문을 돌려서 각 학생의 뿌리를 그 학생이 속한 연합중에 값이 제일 작은 학생으로 저장해둔다.
이므로 최솟값이 나올 수 밖에 없는 코드인 것 같다.
반응형'알고리즘 > BOJ' 카테고리의 다른 글
BOJ 1738 골목길(Python 3) (0) 2019.03.07 BOJ 1613 역사(Python 3) (0) 2019.02.23 BOJ 16946 벽 부수고 이동하기 4(Python 3) (0) 2019.02.18 BOJ 16933 벽 부수고 이동하기 3(Python 3) (0) 2019.02.18 BOJ 14442 벽 부수고 이동하기 2(Python 3) (0) 2019.02.18