Notice
Recent Posts
Recent Comments
Link
๊ด€๋ฆฌ ๋ฉ”๋‰ด

lgvv98

[Swift] BOJ 11724 ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ณธ๋ฌธ

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

[Swift] BOJ 11724 ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 5. 22:54

 BOJ 11724 ์—ฐ๊ฒฐ ์š”์†Œ์˜ ๊ฐœ์ˆ˜

 

โœ… ์˜ˆ์ „์ด๋ฉด ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•˜์ง€ ์‹ถ์—ˆ๋Š”๋ฐ, ์ด์ œ๋Š” ์‰ฝ๊ฒŒ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

BFS / DFS์˜ ๊ฒฝ์šฐ์—๋Š” treeํ˜•ํƒœ๋กœ ์ด๋ก ์„ ๋ฐฐ์› ์–ด์„œ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋ฉด ๋Š˜์ƒ ํฌ๊ธฐํ•˜๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋ž˜ํ”„๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค๋‹ˆ..! ์‹ ๊ธฐํ•ด

 

๊ทผ๋ฐ ์›๋ž˜๋Š” ๋ฌธ์ œ ํ’€๋‹ค๊ฐ€ ์–ด๋ ค์šด๊ฑฐ ์•„๋‹ˆ๋ฉด ํฌ์ŠคํŒ… ์•ˆํ•˜๋Š”๋ฐ, ์–ด๋Š ์ˆœ๊ฐ„๋ถ€ํ„ฐ์ธ๊ฐ€ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ํฌ์ŠคํŒ… ํ•˜๊ณ  ์žˆ๋‹ค.

๋‚˜๋™๋นˆ ํŒŒ์ด์ฌ ์ฑ…์—์„œ๋Š” BFS๊ฐ€ DFS๋ณด๋‹ค ๋น ๋ฅด๋‹ค๋ผ๊ณ  ํ•˜์˜€์ง€๋งŒ, ์Šค์œ„ํ”„ํŠธ์—์„œ๋Š” ๊ตฌํ˜„์— ๋”ฐ๋ผ BFS๋ณด๋‹ค DFS๊ฐ€ ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

 

์•„๋ž˜์˜ ๊ธ€์€ ๋‚ด๊ฐ€ DFS / BFS๋ฅผ ๊ตฌํ˜„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

2022.04.02 - [์ฝ”๋”ฉํ…Œ์ŠคํŠธ] - [Swift] BOJ 1260 DFS์™€ BFS

 

๋‚˜๋Š” ์ฃผ๋กœ BFS์˜ ๊ฒฝ์šฐ removFirst๋ฅผ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฐฐ์—ด์˜ write / read ์ž‘์—…์ด ๋“ค์–ด๊ฐ€์„œ ์‹œ๊ฐ„๋ณต์žก๋„์—์„œ ์†ํ•ด๋ฅผ ๋ณธ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐฑ์ค€์—์„œ BFS๋กœ ๋ถ„๋ฅ˜๋œ ๋ฌธ์ œ์˜€์ง€๋งŒ ์ด๋ฒˆ ๊ตฌํ˜„์—์„œ๋Š” DFS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฌผ๋ก  ๋ฌธ์ œ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉํ•˜์ง€๋งŒ!! 

 

 

โœ… ์ฝ”๋“œ

//https://www.acmicpc.net/problem/11724
import Foundation

struct b11724 {
    static func run() {
        let info = readLine()!.split(separator: " ").map{ Int("\($0)")! }
        var list = [Int: [Int]]()
        var keys: Set = Set<Int>()
        
        for _ in 0..<info[1] {
            let line = readLine()!.split(separator: " ").map{ Int(String($0))! }
            let start = line[0]
            let end = line[1]
            
            if list[start] == nil {
                list[start] = [end]
                keys.insert(start)
            } else {
                list[start]?.append(end)
            }
            
            if list[end] == nil {
                list[end] = [start]
                keys.insert(end)
            } else {
                list[end]?.append(start)
            }
        }
        
        var count = info[0] - keys.count
        
        while !keys.isEmpty {
            count += 1
            // DFS
            var visitedQueue = [Int]()
            var needVisitStack = list[keys.first!]!
            
            while !needVisitStack.isEmpty {
                let node: Int = needVisitStack.removeLast()
                if visitedQueue.contains(node) { continue }
                keys.remove(node)
                
                visitedQueue.append(node)
                needVisitStack += list[node] ?? []
            }
            
            keys.subtract(visitedQueue)
        }
        

        print(count)
    }
}
Comments