프로그래머스 위클리챌린지 9주차

김준오·2021년 10월 5일
1

알고리즘

목록 보기
62/91
post-thumbnail

문제

https://programmers.co.kr/learn/courses/30/lessons/86971

union find로 한개씩 빼보면서 가장 비슷하게 나뉘는 값을 리턴해준다.
union 하고나서 마지막에 갱신을 위해 모든 원소에 대해 find 한번씩 해주는것 빼먹지말자

내 풀이

def solution(n, wires):

    def find(f,x):
        if f[x] == x:
            return x
        
        f[x] = find(f,f[x])
        return f[x]
        
    def union(f,a,b):
        
        a = find(f,a)
        b = find(f,b)
        
        if f[a] == f[b]:
            return 
        
        elif a < b:
            f[b] = a
            
        elif b < a:
            f[a] = b
    
    answer_list = []
    
    for i in range(n-1):
        f = [k for k in range(n+1)]   # parent 생성
        for j in range(n-1):
            if i == j: continue  # 한개씩 빼봄
            a,b = wires[j][0],wires[j][1]
            union(f,a,b)    # union
        
        for m in range(1,n+1): # 최종 갱신
            find(f,m)

        one = f.count(1)
        two = n-one
    
        answer_list.append(abs(one-two))
        
    
    
    return min(answer_list)

결과

profile
jooooon

1개의 댓글

comment-user-thumbnail
2021년 10월 8일

갱신을 왜 해주는건가요?

답글 달기

관련 채용 정보