ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์„ฌ ์—ฐ๊ฒฐํ•˜๊ธฐ

4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4

programmers.co.kr

 

๋ฌธ์ œ ํ’€์ด

 n๊ฐœ์˜ ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์งˆ ๋•Œ, ๋ชจ๋“  ์„ฌ์ด ํ†ตํ–‰ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋น„์šฉ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ „ํ˜•์ ์ธ `Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜` ๋ฌธ์ œ์ด๋‹ค. ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด๊ฐ€ ์‚ฌ์ดํด์„ ์ด๋ฃจ์ง€ ์•Š๊ณ , ์ตœ์†Œ ๋น„์šฉ์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฌธ์ œ์—์„œ๋„ "๋‹ค๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๊ฑด๋„ˆ๋”๋ผ๋„ ํ•ด๋‹น ์„ฌ์— ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋œ๋‹ค."๋ผ๋Š” ์กฐ๊ฑด์ด ์ฃผ์–ด์ง„๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ ๋…ธ๋“œ์˜ ๋น„์šฉ(๊ฑด์„คํ•˜๋Š” ๋น„์šฉ)์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ ํ›„, ๋ฐฉ๋ฌธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ˜„์žฌ์˜ ๋น„์šฉ์„ ๊ฐฑ์‹ ํ•˜๋ฉด ๋œ๋‹ค.

 

 ์ฃผ์–ด์ง„ ์˜ˆ์‹œ๋ฅผ Kruskal๋กœ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋˜๋ฉด ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œ ๋น„์šฉ 4๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

def solution(n, costs):
    answer = 0
    costs.sort(key=lambda x: x[2])
    visited = [True] + [False] * (n - 1)

    while not all(visited):
        for cur_node, next_node, cost in costs:
            print(visited)
            if visited[cur_node] and visited[next_node]:
                continue
            if visited[cur_node] or visited[next_node]:
                visited[cur_node] = visited[next_node] = True
                answer += cost
                break
    return answer

 

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€