๐Ÿ’ฅ[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ

Chobbyยท2022๋…„ 2์›” 14์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
7/349

๋ฌธ์ œ๋ฅผ ๋Œ์ด์ผœ๋ณด๋ฉฐ..

ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊ฐ„์„ ์„ ์—ฐ๊ฒฐํ•˜๋ฉฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์งœ์•ผ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋‚ด ๊ธฐ์ค€ ์ƒ๋‹นํžˆ ์–ด๋ ค์šด ๋‚œ์ด๋„์˜ ๋ฌธ์ œ์˜€๋‹ค.. ์งˆ๋ฌธํ•˜๊ธฐ๋ฅผ ์—ฌ๋Ÿฌ๋ฒˆ ๋“ค๋ฝ๋‚ ๋ฝ ๊ฑฐ๋ฆฌ๋ฉฐ ํž˜๋“ค๊ฒŒ ํ’€์–ด์„œ ๋”์šฑ ๊ธฐ์–ต์— ๋‚จ๋Š”๋‹ค.

๋ฌธ์ œ ์„ค๋ช…

n๊ฐœ์˜ ์†ก์ „ํƒ‘์ด ์ „์„ ์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ํ˜„์žฌ์˜ ์ „๋ ฅ๋ง ๋„คํŠธ์›Œํฌ๋ฅผ 2๊ฐœ๋กœ ๋ถ„ํ• ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ–๊ฒŒ ๋˜๋Š” ์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ๋น„์Šทํ•˜๊ฒŒ ๋งž์ถ”๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

์†ก์ „ํƒ‘์˜ ๊ฐœ์ˆ˜ n, ๊ทธ๋ฆฌ๊ณ  ์ „์„  ์ •๋ณด wires๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ „์„ ๋“ค ์ค‘ ํ•˜๋‚˜๋ฅผ ๋Š์–ด์„œ ์†ก์ „ํƒ‘ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋น„์Šทํ•˜๋„๋ก ๋‘ ์ „๋ ฅ๋ง์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ, ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์†ก์ „ํƒ‘ ๊ฐœ์ˆ˜์˜ ์ฐจ์ด(์ ˆ๋Œ€๊ฐ’)๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

์ œํ•œ์‚ฌํ•ญ

n์€ 2 ์ด์ƒ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
wires๋Š” ๊ธธ์ด๊ฐ€ n-1์ธ ์ •์ˆ˜ํ˜• 2์ฐจ์› ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
wires์˜ ๊ฐ ์›์†Œ๋Š” [v1, v2] 2๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ „๋ ฅ๋ง์˜ v1๋ฒˆ ์†ก์ „ํƒ‘๊ณผ v2๋ฒˆ ์†ก์ „ํƒ‘์ด ์ „์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
1 โ‰ค v1 < v2 โ‰ค n ์ž…๋‹ˆ๋‹ค.
์ „๋ ฅ๋ง ๋„คํŠธ์›Œํฌ๊ฐ€ ํ•˜๋‚˜์˜ ํŠธ๋ฆฌ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

์ž…์ถœ๋ ฅ ์˜ˆ
n wires result
9 [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] 3
4 [[1,2],[2,3],[3,4]] 0
7 [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] 1

4๋ฒˆ๊ณผ 7๋ฒˆ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ „์„ ์„ ๋Š์œผ๋ฉด ๋‘ ์ „๋ ฅ๋ง์€ ๊ฐ 6๊ฐœ์™€ 3๊ฐœ์˜ ์†ก์ „ํƒ‘์„ ๊ฐ€์ง€๋ฉฐ, ์ด๋ณด๋‹ค ๋” ๋น„์Šทํ•œ ๊ฐœ์ˆ˜๋กœ ์ „๋ ฅ๋ง์„ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” 3๋ฒˆ๊ณผ 4๋ฒˆ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ „์„ ์„ ๋Š์–ด๋„ ์ตœ์„ ์˜ ์ •๋‹ต์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

๋‹ค์Œ ๊ทธ๋ฆผ์€ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2๋ฒˆ๊ณผ 3๋ฒˆ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ „์„ ์„ ๋Š์œผ๋ฉด ๋‘ ์ „๋ ฅ๋ง์ด ๋ชจ๋‘ 2๊ฐœ์˜ ์†ก์ „ํƒ‘์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ, ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

๋‹ค์Œ ๊ทธ๋ฆผ์€ ์ฃผ์–ด์ง„ ์ž…๋ ฅ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

3๋ฒˆ๊ณผ 7๋ฒˆ์„ ์—ฐ๊ฒฐํ•˜๋Š” ์ „์„ ์„ ๋Š์œผ๋ฉด ๋‘ ์ „๋ ฅ๋ง์ด ๊ฐ๊ฐ 4๊ฐœ์™€ 3๊ฐœ์˜ ์†ก์ „ํƒ‘์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋ฉฐ, ์ด ๋ฐฉ๋ฒ•์ด ์ตœ์„ ์ž…๋‹ˆ๋‹ค.

๋‚˜์˜ ํ’€์ด

function solution(n, wires) {
    // ์ตœ๋Œ€ ๊ฐ’์œผ๋กœ ์„ค์ •
    let result = Number.MAX_SAFE_INTEGER
    for(let i = 0 ; i < wires.length ; i ++) {
        // ์ „๋ ฅ๋ง ํ•˜๋‚˜๋ฅผ ๋Š๊ธฐ
        const curExceptArr = wires.slice(0,i).concat(wires.slice(i+1))
        // ์ „๋ ฅ๋ง ๊ตฌ์ถ•
        const curConnect = {}
        curExceptArr.forEach(wire => {
            const [to,from] = wire
            if(!curConnect[to]) curConnect[to] = []
            if(!curConnect[from]) curConnect[from] = []
            curConnect[to].push(from)
            curConnect[from].push(to)
        })
        // ๊ฐ ์ „๋ น๋ง์˜ ์ด์–ด์ง„ ๊ฐœ์ˆ˜ ์„ธ๊ธฐ
        const [root,tree] = Object.entries(curConnect)[0]
        let count = findTree(curConnect,root)
        const other = n-count
        count = Math.abs(count-other)
        if(result > count) {
            result = count
        }
    }
    
    return result
}

// ๋ป—์–ด๋‚˜๊ฐ„ ์ „๋ ฅ๋ง์˜ ์ˆ˜ ์นด์šดํŠธ
function findTree(obj,root) {
    let count = 1 
    const queue = [root]
    let visit = []
    visit[root] = true
    while(queue.length) {
        const cur = queue.pop()
        obj[cur].forEach(now => {
            // ๋ฐฉ๋ฌธ ๊ธฐ๋ก์ด ์—†์œผ๋ฉด
            if(!visit[now]) {
                queue.push(now)
                visit[now] = true
                count++
            }
        })
    }
    return count
}
profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

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