Programmers level2 전력망을 둘로 나누기

soominlee·2022년 8월 8일
0

🧄 Coding Test

목록 보기
5/9

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
# start 18:03
# end 18:50
import copy

def find_node(tower_num, wires_arr):
    cnt = 0
    
    for wire in wires_arr:
        if tower_num in wire:
            arr = copy.deepcopy(wires_arr)
            arr.remove(wire)
            cnt += 1
            cnt += find_node(wire[abs(wire.index(tower_num)-1)], arr)
            
    return cnt

def solution(n, wires):
    answer = -1
    
    group_diff = []
    for wire in wires:
        r_tower1 = wire[0]
        r_tower2 = wire[1]
        wires_tmp = copy.deepcopy(wires)
        wires_tmp.remove(wire)
        
        group_diff.append(abs(find_node(r_tower1, wires_tmp)-find_node(r_tower2, wires_tmp)))
                          
    answer = min(group_diff)
                          
    return answer
구현 내용
  1. wires를 하나씩 탐색
  2. 해당하는 wire로 연결된 송전탑이 각각의 root 송전탑이 됨
  3. root 송전탑과 연결된 송전탑들의 개수를 각각 구해서 차를 구한 후 최소값을 return
다른 사람의 풀이
def solution(n, wires):
    ans = n
    for sub in (wires[i+1:] + wires[:i] for i in range(len(wires))):
        s = set(sub[0])
        [s.update(v) for _ in sub for v in sub if set(v) & s]
        ans = min(ans, abs(2 * len(s) - n))
    return ans
profile
Soominlee

0개의 댓글