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 1516 ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๋ณธ๋ฌธ

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

[Swift] BOJ 1516 ๊ฒŒ์ž„ ๊ฐœ๋ฐœ

๐Ÿฅ• ์บ๋Ÿฟ๋งจ 2022. 5. 24. 20:52

BOJ 1516 ๊ฒŒ์ž„ ๊ฐœ๋ฐœ

 

โœ… ์ด ๋ฌธ์ œ๋Š” ์œ„์ƒ ์ •๋ ฌ ๋ฌธ์ œ์ธ๋ฐ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•ฝ๊ฐ„ ๋ณต์žกํ–ˆ๋‹ค.

๊ทผ๋ฐ ํ’€๋‹ค๊ฐ€ ๋ชปํ’€ ๊ฒƒ ๊ฐ™์•˜๋Š”๋ฐ ๋งž์•˜์„ ๋•Œ์˜ ํฌ์—ด๊ฐ์ด๋ž€,, ใ…Ž

 

๐ŸŸ  ๋ฌธ์ œํ’€์ด ํ”Œ๋กœ์šฐ

 

์šฐ์„  input์€ ๊ธฐ์กด์˜ ์œ„์ƒ์ •๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ Input์„ ๋ฐ›๋Š”๋‹ค.

 

๋‹ค๋งŒ ์ค‘์š”ํ•œ๊ฑด, ์‹œ๊ฐ„์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

1. ์šฐ์„  ์ดˆ๊ธฐ์— queue์— ๋“ค์–ด๊ฐ„ ๊ฐ’์˜ ๊ฒฝ์šฐ์—๋Š” ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์–ด์„œ result์— ์„ธํŒ…

2. while๋ฌธ์„ ์œ„์ƒ์ •๋ ฌ๊ณผ ๋™์ผํ•œ ๋กœ์ง์œผ๋กœ ๋ˆ๋‹ค.

 -> while๋ฌธ ๋‚ด์—์„œ maxTime์„ ๊ณ„์‚ฐํ•ด์ฃผ๋Š”๋ฐ

 2-1. ๋‚ด ์„ ์ˆ˜(๋‚ด๊ฐ€ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด)์˜ ์ดˆ๊ธฐ time๊ฐ’๊ณผ ๊ฐฑ์‹ ๋œ ์‹œ๊ฐ„์„ ๋น„๊ตํ•˜์—ฌ ๋” ํฐ ๊ฐ’์„ maxTime์— ๋„ฃ์–ด์ค€๋‹ค.

 2-2.  ์ด ์ฝ”๋“œ๋ฅผ ๋ณด์ž.

result[i] = max(result[i], (maxTime + time[i]))

์™œ ์ด๊ฑธ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ƒ๋ฉด ํŠน์ • i๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๊ฐฑ์‹ ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ผ์ „์— ๊ณ„์‚ฐ๋œ ๊ฐ’๋ณด๋‹ค ํ˜„์žฌ ๊ฐ’์ด ์ž‘์€ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ

 

// 2-2์— ๋Œ€ํ•œ ๋ฐ˜๋ก€
5
10 -1
20 1 -1
30 2 -1
40 3 5 -1
100 -1

// ๋‚ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์˜ํ•˜๋ฉด
graph: [1: [2], 5: [4], 2: [3], 3: [4]]

graph๋ฅผ ๋ณด๋ฉด 4์˜ ๊ฒฝ์šฐ์—๋Š” 5์™€ 3์—์„œ ๋‘๋ฒˆ ๊ฐฑ์‹ ๋˜๋Š”๋ฐ, ๋” ํฐ ๊ฐ’์„ ๋“ค๊ณ  ์žˆ์–ด์•ผ ํ•ด์„œ 2-2 ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

 

 

 

โœ… ์ฝ”๋“œ

        import Foundation
        // input์€ ๊ฑด๋ฌผ์˜ ๊ฐœ์ˆ˜
        let input = Int(readLine()!)!
        
        var graph = [Int: [Int]]() // ์„ ์ˆ˜ ๊ฑด๋ฌผ์— ๋Œ€ํ•œ ์ •๋ณด
        var indegree = [Int](repeating: 0, count: input+1) // ์ง„์ž…์ฐจ์ˆ˜ ์ •๋ณด
        indegree[0] = -1 // ๊ฑด๋ฌผ๋ฒˆํ˜ธ 1๋ฒˆ๋ถ€ํ„ฐ๋ผ index๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋ ค๊ณ 
        
        var time = [Int](repeating: 0, count: input+1)
        time[0] = 0 // ๊ฑด๋ฌผ๋ฒˆํ˜ธ 1๋ฒˆ๋ถ€ํ„ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋ƒฅ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ
        
        for i in 1...input {
            let info = readLine()!.split(separator: " ").map { Int(String($0))! }
            time[i] = info[0]
            
            info[1..<info.count-1].forEach {
                if $0 != -1 {
                    if graph[$0] == nil {
                        graph[$0] = [i]
                    } else {
                        graph[$0]!.append(i)
                    }
                    
                    indegree[i] += 1
                }
            }
            
        }
        
//        print(graph)
//        print(indegree)
//        print("time \(time)")
        
        var queue = [Int]()
        indegree.enumerated().forEach {
            if $0.element == 0 {
                queue.append($0.offset)
            }
        }
        
//        print(queue)
        
        var result = [Int](repeating: 0, count: input+1)
        result[0] = 0 // ๊ฑด๋ฌผ๋ฒˆํ˜ธ 1๋ฒˆ๋ถ€ํ„ฐ๋ผ์„œ ์ธ๋ฑ์Šค๋ฅผ ๊ทธ๋ƒฅ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ
        
        // ํ๊ฐ€ ๋นŒ๋•Œ๊นŒ์ง€
        queue.forEach { index in
            result[index] = time[index]
        }
        while !queue.isEmpty {
//            print("queue \(queue)")
            let now = queue.removeFirst()
            // ๋‚ด ์„ ์ˆ˜๋“ค์˜ ํ•ฉ์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
            
            
            
            // ํ•ด๋‹น์›์†Œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋“ค์˜ ์ง„์ž…์ฐจ์ˆ˜์—์„œ -1
            if let sequence = graph[now] {
                let maxTime = max(time[now], result[now])
                
                for i in sequence {
                    indegree[i] -= 1
                    
                    if indegree[i] == 0 {
                        queue.append(i)
                    }
                    result[i] = max(result[i], (maxTime + time[i]))
                }
                
            }
            
        }
        
//        print(result)
        for item in result[1...] {
            print(item)
        }
Comments