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] BOJ 2606 ๋ฐ”์ด๋Ÿฌ์Šค ๋ณธ๋ฌธ

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

[Swift] BOJ 2606 ๋ฐ”์ด๋Ÿฌ์Šค

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 4. 3. 16:38

BOJ 2606 ๋ฐ”์ด๋Ÿฌ์Šค

 

โœ… ์ด๊ฑด ์ง„์งœ ์‰ฌ์› ์Œ. ( solved.ac ๊ธฐ์ค€ ์‹ค3 )

์‚ฌ์‹ค ์ด์ „์— ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์•ˆํ’€๋ ค์„œ ์ด๊ฑธ๋กœ ์ด๋™ํ•จ

๊ทธ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ ์„ค๊ณ„๋Š” ํ–ˆ๋Š”๋ฐ, ๋ญ”๊ฐ€ ์–ด๋””์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š”์ง€ ์ œ๋Œ€๋กœ ์•ˆ๋˜์–ด์„œ ๊ฑ ํŒจ์Šคํ–ˆ์Œ.

 

๋‹ค๋ฅธ๊ฑด ์•„๋‹ˆ๊ณ  ์ฃผ์˜ํ•  ์  ํ•˜๋‚˜๋งŒ ๋‚จ๊ฒจ๋‘๊ฒ ์Œ.

๋‚ด๊ฐ€ ํ”ํžˆ ํ•˜๋Š” ์‹ค์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€, ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š” ์ˆœ๊ฐ„์—์„œ ์ €์ง€๋ฅด๋Š” ์‹ค์ˆ˜์ธ๋ฐ 

๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋ผ๋ฉด ์„œ๋กœ๊ฐ€ ์„œ๋กœ๋ฅผ ๋ฐฐ์—ด์— ๋‹ด์•„์•ผ ํ•จ.

๋ฌด์Šจ ๋ง์ด๋ƒ๋ฉด ๋‚˜๋Š” ์ฃผ๋กœ [ Int: [Int] ] ํ˜•ํƒœ๋กœ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ

2๋ฒˆ๊ณผ 5๋ฒˆ์˜ ๊ฒฝ์šฐ

2: [1,3,5] 

5: [1,2,6]

์ด๋ ‡๊ฒŒ ๊ฐ€์ ธ์•ผํ•œ๋‹ค๋Š” ๋ง์ž„.

๊ทผ๋ฐ ๋‚˜๋Š” ํŠธ๋ฆฌ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ์‹ค์ˆ˜๋ฅผ ์ข…์ข…ํ•จ.

๊ทธ๋ž˜ํ”„ํ˜•ํƒœ

๋‚˜๋Š” ๊ทธ๋ƒฅ DFS๋กœ ํ–ˆ๋Š”๋ฐ BFS์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€ ์—†์Œ

 

๐ŸŸ  ์ฝ”๋“œ

import Foundation

struct b2606 {
    static func run() {
        // Input ์ฒ˜๋ฆฌ
        var n = Int(readLine()!)!
        var input = Int(readLine()!)!
        
        var list = [Int: [Int]]()
        
        for _ in 0..<input {
            let line = readLine()!.split(separator: " ").map{ Int(String($0))! }
            let start = line[0]
            let end = line[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)
            }
        }
        
//        print(list)
        let a = DFS(graph: list, start: 1)
        print(a.count-1)
    }
}

import Foundation

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