ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค-LV.3-์„ฌ-์—ฐ๊ฒฐํ•˜๊ธฐ-JS๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Œ์„ ๋ฏธ๋ฆฌ ๋ฐํž™๋‹ˆ๋‹ค.

๐Ÿฅž๋ฌธ์ œ ์„ค๋ช…

n๊ฐœ์˜ ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•˜๋Š” ๋น„์šฉ(costs)์ด ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œ์˜ ๋น„์šฉ์œผ๋กœ ๋ชจ๋“  ์„ฌ์ด ์„œ๋กœ ํ†ตํ–‰ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค ๋•Œ ํ•„์š”ํ•œ ์ตœ์†Œ ๋น„์šฉ์„ return ํ•˜๋„๋ก solution์„ ์™„์„ฑํ•˜์„ธ์š”.

๋‹ค๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฑด๋„ˆ๋”๋ผ๋„, ๋„๋‹ฌํ•  ์ˆ˜๋งŒ ์žˆ์œผ๋ฉด ํ†ตํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ด…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A ์„ฌ๊ณผ B ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๊ฐ€ ์žˆ๊ณ , B ์„ฌ๊ณผ C ์„ฌ ์‚ฌ์ด์— ๋‹ค๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด A ์„ฌ๊ณผ C ์„ฌ์€ ์„œ๋กœ ํ†ตํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ ์ œํ•œ์‚ฌํ•ญ

  • ์„ฌ์˜ ๊ฐœ์ˆ˜ n์€ 1 ์ด์ƒ 100 ์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • costs์˜ ๊ธธ์ด๋Š” ((n-1) * n) / 2์ดํ•˜์ž…๋‹ˆ๋‹ค.
  • ์ž„์˜์˜ i์— ๋Œ€ํ•ด, costs[i][0] ์™€ costs[i][1]์—๋Š” ๋‹ค๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋˜๋Š” ๋‘ ์„ฌ์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด์žˆ๊ณ , costs[i][2]์—๋Š” ์ด ๋‘ ์„ฌ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ๋ฅผ ๊ฑด์„คํ•  ๋•Œ ๋“œ๋Š” ๋น„์šฉ์ž…๋‹ˆ๋‹ค.
  • ๊ฐ™์€ ์—ฐ๊ฒฐ์€ ๋‘ ๋ฒˆ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„ ๊ฐ™์€ ์—ฐ๊ฒฐ๋กœ ๋ด…๋‹ˆ๋‹ค. ์ฆ‰ 0๊ณผ 1 ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋น„์šฉ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, 1๊ณผ 0์˜ ๋น„์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์„ฌ ์‚ฌ์ด์˜ ๋‹ค๋ฆฌ ๊ฑด์„ค ๋น„์šฉ์ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋‘ ์„ฌ ์‚ฌ์ด์˜ ๊ฑด์„ค์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๋ด…๋‹ˆ๋‹ค.
  • ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์„ฌ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿฅ™์ž…์ถœ๋ ฅ ์˜ˆ

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

๐ŸฅŸ์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

costs๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์œผ๋ฉฐ, ์ด๋•Œ ์ดˆ๋ก์ƒ‰ ๊ฒฝ๋กœ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ ์€ ๋น„์šฉ์œผ๋กœ ๋ชจ๋‘๋ฅผ ํ†ตํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๐ŸŒญ๋‚˜์˜ ํ’€์ด

function solution(n, costs) {
    
    // ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋ฅผ ์ฐพ๋Š” ์žฌ๊ท€ํ•จ์ˆ˜
    function getParent(parent, to) {
        // ์ตœ์ƒ์œ„ ๋ถ€๋ชจ๋ฅผ ๋ฐ˜ํ™˜
        if(parent[to] === to) return to
        return parent[to] = getParent(parent, parent[to])
    }
    
    // ๊ฐ™์€ ๋ถ€๋ชจ์ธ์ง€ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
    function findParent(parent, a, b) {
        // ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์˜ด
        const n1 = getParent(parent, a)
        const n2 = getParent(parent, b)
        if(n1 === n2) return true
        else return false
    }
    
    // ์ฐพ์€ ๋ถ€๋ชจ๋ผ๋ฆฌ ๋ณ‘ํ•ฉ
    function unionParent(parent, a, b) {
        // ์•„์ดํ…œ์„ ๋ถˆ๋Ÿฌ์˜ด
        const n1 = getParent(parent, a)
        const n2 = getParent(parent, b)
        // ๋ฒˆํ˜ธ๋ฅผ ๋น„๊ตํ•ด ์ž‘์€ ์ชฝ์ด ๋ถ€๋ชจ๊ฐ€ ๋˜๋„๋ก ๊ฒฐ์ •ํ•จ
        if(n1 < n2) return parent[n2] = n1
        else return parent[n1] = n2
    }
    
    // ๊ธฐํšŒ๋น„์šฉ ํ•ฉ๊ณ„
    let costSum = 0
    
    // ๊ฒฝ๋กœ ๋ถ€๋ชจ ๋ฐฐ์—ด
    const parent = []
    
    // ๋ชจ๋“  ์ตœ์ƒ์œ„ ๊ธธ์„ ๋ถ€๋ชจ ๋ฐฐ์—ด์— ์ž…๋ ฅ
    for(let i = 0 ; i < n ; i ++) {
        parent.push(i)
    }
    
    // ๋น„์šฉ ๋ณ„ ์˜ค๋ฆ„์ฐจ ์ˆœ ์ •๋ ฌ
    costs.sort((a,b) => a[2] - b[2])
    
    // costs ๋ฐฐ์—ด ์ˆœํšŒ
    costs.forEach((cost, idx) => {
        const [from, to, val] = cost
        // ๋ถ€๋ชจ๊ฐ€ ๊ฐ™์€์ง€ ๋น„๊ต
        if(!findParent(parent, from, to)) {
            // ๋ถ€๋ชจ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋ฉด ํ•„์š”ํ•œ ๋น„์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ถ€๋ชจ๋ฅผ ๋ณ‘ํ•ฉํ•จ
            costSum += val
            unionParent(parent, from, to)
        }
    })
    
    return costSum
}

์ด ๋ฌธ์ œ๋Š” Greedy ์™€ Graph๊ฐ€ ๊ฐ™์ด ์„ž์—ฌ ์žˆ๋Š” ๋ฌธ์ œ๋ผ๋˜๋ฐ...

๋ชจ๋‘ ์ด์–ด์ ธ์žˆ๋Š” ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋Š” ๋ถ€๋ชจ ๊ฒฝ๋กœ๊ฐ€ ์ด์–ด์ ธ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณธ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ๊ฒ ์Œ

profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€