๐Ÿ“š Study/Baekjoon

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Lv2 | ์™„์ „ํƒ์ƒ‰ | ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ

์œฐ๊ฐฑ 2025. 10. 11. 05:52

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

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก์˜ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

2026.04.01

์ž˜๋ฆฐ๊ฑฐ ๊ณ ๋ คํ•˜๋Š”๊ฑธ ๊ทธ๋ƒฅ cut_a, cut_b๋กœ ํ•˜๋ฉด ๊ฐ„๋‹จํ–ˆ์Œ

def dfs(curr, graph, visited, cut_a, cut_b):
    visited[curr] = True
    cnt = 1
    
    for g in graph[curr]:
        if (curr == cut_a and g == cut_b) or (curr == cut_b and g == cut_a):
            continue
        if not visited[g]:
            cnt += dfs(g, graph, visited, cut_a, cut_b)
    return cnt

def solution(n, wires):
    graph = [[] for _ in range(n+1)]
    for w in wires:
        a, b = w
        graph[a].append(b); graph[b].append(a)
        
    diff = []
    for w in wires:
        cut_a, cut_b = w
        visited = [False] * (n+1)
        cut1 = dfs(cut_a, graph, visited, cut_a, cut_b)
        cut2 = n - cut1
        diff.append(abs(cut1-cut2))
    
    return min(diff)

 


์—ฐ๊ฒฐ๋œ ๊ฐœ์ˆ˜ ์…€ ๋•Œ, ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด cnt += dfs๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ

๊ทธ๋ž˜ํ”„ ๋งŒ๋“ค์–ด์„œ ์ ‘๊ทผํ•˜๋Š”๊ฑด ์ž˜ํ–ˆ์Œ

def dfs(wires, graph, curr, no_wire_idx, visited):
    cnt = 1
    visited[curr] = True
    for next in graph[curr]:
        if not visited[next]:
            if curr and next not in wires[no_wire_idx]:
                cnt += dfs(wires, graph, next, no_wire_idx, visited)
    return cnt

def solution(n, wires):    
    # graph ๋งŒ๋“ค๊ธฐ
    graph = [[] for _ in range(n+1)]
    for i in range(len(wires)):
        a, b = wires[i]
        graph[a].append(b); graph[b].append(a)
    
    result_list = set()
    # ๋ชจ๋“  ์ „์„ ์— ๋Œ€ํ•˜์—ฌ ํ•œ๋ฒˆ์”ฉ ์ง„ํ–‰
    for i in range(len(wires)):
        a, b = wires[i]
        visited = [False] * (n+1)
        group1 = dfs(wires, graph, a, i, visited)
        group2 = n - group1
        result_list.add(group1-group2 if group1>group2 else group2-group1)
    
    return min(result_list)