ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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문을 돌려서 각 학생의 뿌리를 그 학생이 속한 연합중에 값이 제일 작은 학생으로 저장해둔다.

    이므로 최솟값이 나올 수 밖에 없는 코드인 것 같다.


    반응형

    댓글

Designed by Tistory.