알고리즘 문제 풀이

[Swift] BOJ 1238 파티

lgvv 2022. 5. 11. 18:35

BOJ 1238 파티

 

✅ BOJ 1238 파티

스위프트는 다익스트라 알고리즘 풀려면 진짜 극악이다.

특히 효율성을 따져야한다면 힙을 구현해서 사용해야 하는데, 이거 진짜 너무나도 노가다 작업인듯.

 

다익 쓰면 쉽게 푸는데 이거 다익을 구현하는게 결국은 관건임.다른 사람들도 효율성을 위해서 힙을 사용했는데, 하 힙 구현해서 쓰기 너무나도 귀찮음 .. . . .

 

✅ 코드

//
//  b1238.swift
//  Algorithm
//
//  Created by Hamlit Jason on 2022/05/11.
//
// https://www.acmicpc.net/problem/1238
import Foundation

struct b1238 {
    static func run() {
        let input = readLine()!.split(separator: " ")
        var graph = [String: [String: Int]]()
        
        for _ in 0..<Int(input[1])! {
            let item = readLine()!.components(separatedBy:" ")
            let start = String(item[0])
            let end = String(item[1])
            let cost = Int(item[2])!
            
            if graph[item[0]] == nil {
                graph[start] = [end: cost]
            } else {
                var a = graph[start]!
                a[end] = cost
                graph[start] = a
            }
        }
        
//        print(graph)
        
        var timeList = [Int](repeating: 0, count: Int(input[0])! + 1)
        
        // 갈때
        for n in 1...Int(input[0])! {
            let answer = dijkstra(graph: graph, start: String(n))
            timeList[n] = answer[String(input[2])]!
        }
        
//        print(timeList)
        
        // 돌아올 때
        let answer = dijkstra(graph: graph, start: String(input[2]))
        answer.forEach {
            timeList[Int($0)!] += $1
        }
//        print(timeList)
        print(timeList.max()!)
        
        
    }
}