Notice
Recent Posts
Recent Comments
Link
ยซ   2024/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ ๋ณธ๋ฌธ

์ฝ”๋”ฉํ…Œ์ŠคํŠธ

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

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 6. 15:10

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV2. ์ „๋ ฅ๋ง์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ธฐ 

 

โœ… ์ด๊ฑฐ ์™œ ํฌ์ŠคํŒ… ํ•˜๋ƒ๋ฉด ๋‘๊ฐ€์ง€ ์˜์˜๊ฐ€ ๋‚˜ํ•œํ…Œ ์žˆ์Œ.

1. ๊ตฌ๊ธ€๋ง ์—†์ด BFS / DFS๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•ด๋‚ด์–ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ.

2. minValue๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ˆ˜์‹์ด ํ‹€๋ ค์„œ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งž์Œ์—๋„ ๋ญ๊ฐ€ ๋ฌธ์ œ์ธ์ง€ ๊ณ ๋ฏผํ•œ ์‹œ๊ฐ„๋“ค์ด ๋‹ต๋‹ตํ•ด์„œ

 

๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ๋ถ€๋ถ„์€ minValue๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •์—์„œ n - count - count๋ฅผ ํ•ด์•ผํ•˜๋Š”๋ฐ, ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ–ˆ๋Š”์ง€, count - n ์ด๋ž‘ ๋™์ผํ•œ ๊ฐ’์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Œ. ๊ทธ๋ž˜์„œ ์ˆ˜์ •์™„๋ฃŒ!!

 

โœ… ์ฝ”๋“œ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ๋ฒ•

์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ‘๊ทผ๋ฒ•์€, input์˜ ๊ฒฝ์šฐ์—๋Š” ๋Š˜ ๊ทธ๋žฌ๋“ฏ ์ €๋ ‡๊ฒŒ ๋ฐ›๋Š”๋‹ค. ์ €๋ ‡๊ฒŒ ๋ฐ›์•„์•ผ ๊ฐ ์ •์ (๋…ธ๋“œ)๋“ค์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๊ฒŒ ๋น ์ง€์ง€ ์•Š๊ณ  ์„ค์ •๋œ๋‹ค.

 

๊ทธ ๋‹ค์Œ์—๋Š” ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ƒ์œ„ for๋ฌธ์—์„œ๋Š” ์ •์ ์„ ์ˆœํšŒํ•˜๋ฉฐํ•˜์œ„ for๋ฌธ์—์„œ๋Š” ๊ทธ ์ •์ ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๊ฐ’์„ ์ˆœํšŒํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋กœ์ง์ด ์ด ๋ฌธ์ œ์˜ ์กฐ๊ฑด์—์„œ ํŠธ๋ฆฌ๋ฅผ ์ „์ œํ•œ๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ ์ •์ ์—์„œ removeFirst()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Š์–ด์ฃผ๋ฉด, ๋Š์–ด์ง„ ๋ฐ˜๋Œ€ํŽธ์„ ์ ˆ๋Œ€๋กœ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.(๋‹จ, ๋ฌธ์ œ๊ฐ€ ๊ทธ๋ž˜ํ”„์ผ์ˆ˜๋„ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ ๋ฐ˜๋Œ€์ชฝ ์ •์ (๋…ธ๋“œ)์—์„œ๋„ ๋Š์–ด์ฃผ๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.)

DFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฉ๋ฌธํ•œ๋‹ค. ๊ทธ๋Ÿผ ๋Š์–ด์ง„ ๋ถ€๋ถ„์„ ๋ฐฉ๋ฌธํ•˜์ง€ ๋ชปํ•ด์„œ DFS์˜ ๊ฐ’์ด ์ •์ ์˜ ์ด ๊ฐœ์ˆ˜๋ณด๋‹ค ์ž‘๊ฒŒ ๋‚˜์˜ฌํƒ ๋ฐ, ์ด๋ฅผ ํ†ตํ•˜์—ฌ ํ•ด๊ฒฐํ•œ๋‹ค.

    func solution(_ n:Int, _ wires:[[Int]]) -> Int {
        var list = [Int :[Int]]()
        for i in 0..<wires.count {
            let start = wires[i][0]
            let end =  wires[i][1]
            
            if list[start] == nil {
                list[start] = [end]
            } else {
                list[start]?.append(end)
            }
            
            if list[end] == nil {
                list[end] = [start]
            } else {
                list[end]?.append(start)
            }
        }
        
        // 1. ์ „๋ ฅ๋ง์„ ๋Š๋Š”๋‹ค.
        // 2. DFS / BFS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธํ•œ ์ง€์ ์„ ์นด์šดํŒ…ํ•œ๋‹ค.
        // 3. ์ตœ์†Œ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค.
        var minValue = Int.max
        
        for i in 1...n {
            for _ in 1...list[i]!.count {
                let point = list[i]!.removeFirst() // ์ „๋ ฅ๋ง ๋Š๊ธฐ
                
                if point != i {
                    let count = DFS(graph: list, start: i).count
                    minValue = min(abs(n - count - count), minValue)
                }
                list[i]!.append(point)
            }
        }
        
        
        return minValue
    }
    
func DFS<T> (graph: [T: [T]], start: T) -> [T] {
    var visitedQueue: [T] = []
    var needVisitStack: [T] = [start]
    
    while !needVisitStack.isEmpty {
        let node: T = needVisitStack.removeLast()
        if visitedQueue.contains(node) { continue }
        
        visitedQueue.append(node)
        needVisitStack += graph[node] ?? []
    }
    
    return visitedQueue
}

 

๋ฌธ์ œ๋ฅผ ํ’€๊ณ ๋‚˜์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ํ’€์œผ์…จ๋Š”์ง€ ์ฐพ์•„๋ณด์•˜์Œ. ์–ด๋–ค ๋ถ„์ด ์—„์ฒญ ์„ธ๋ จ๋˜๊ธฐ ํ’€์œผ์‹  ์ฝ”๋“œ๊ฐ€ ๊ธฐ์–ต๋‚จ. ๊ทผ๋ฐ ๋‚˜๋Š” ์Šคํƒ ๋‹ค๋“œ์™€ ์˜ค๋ฆฌ์ง€๋„ํ•˜๊ฒŒ ๋‚˜๋งŒ์˜ ํ’€์ด๋ฒ•์„ ๊ฐ–๊ณ  ๊ฐ€๋Š”๊ฒŒ ์ข‹์•„์„œ, ์ด๋ ‡๊ฒŒ ํ’ˆ.

 

 

Comments