boorooksus   4년 전

 출력 초과가 뜨는 이유를 모르겠습니다. 

아래 코드는 유니온파인드를 이용하여 같은 네트워크 속 친구 수를 찾도록 만든 것 입니다.

여기서 부모를 합치는 함수는 9~20번째 줄의 unionParent1(a, b)과 22~28번째 줄의 unionParent2(a,b) 두 가지로 만들어 보았습니다. 두 함수 모두 잘 작동이 됩니다. 그런데 unionParent2 함수를 이용할 경우 맞다고 채점이 되지만 unionParent1함수를 이용할 경우 출력 초과가 뜹니다.

unionParent1의 함수는 입력받은 a, b 중에 더 작은 쪽의 부모로 합치는 것이고 

unionParent2의 함수는 a가 b의 부모인 것을 전제로 두고 실행하는 함수입니다.

두 경우 모두 잘 작동되는것 같은데 왜 전자의 경우 출력초과가 뜨는지 궁금합니다.

감사합니다.

wjdclgns12   4년 전

위 함수는 a b가 이미 같은 집합에 있어도 또 합칩니다

boorooksus   4년 전

말씀대로 중복으로 카운트 돼서 안되던것이었네요. 

아래와 같이  수정하니 잘 됩니다. 

def unionParent1(a, b):
    a = getParent(a)
    b = getParent(b)
    sum = cnt_dict[a] + cnt_dict[b]
    #더 작은 쪽을 부모로 갖는다
    if a > b:
        parent_dict[a] = b
        cnt_dict[a] = sum
        cnt_dict[b] = cnt_dict[a]
    elif a < b:
        parent_dict[b] = a
        cnt_dict[b] = sum
        cnt_dict[a] = cnt_dict[b]
    return

감사합니다! 좋은 하루 되세요

댓글을 작성하려면 로그인해야 합니다.