シャトルバス(Lv.3)


質問リンク

に答える

func solution(_ n:Int, _ t:Int, _ m:Int, _ timetable:[String]) -> String {
    var timetableInfo = timetable.map { $0.components(separatedBy: ":").map { Int($0)! } }
    timetableInfo.sort { $0[0] < $1[0] || ($0[0] == $1[0] && $0[1] < $1[1]) }   // 먼저 온 순서로 정렬
    var busTime = [9, 0]    // 시, 분
    
    var result = busTime
    
    for index in 0..<n {
        var remains = timetableInfo
        var throughput = m
        var lastMan = [0, 0]    // 마지막에 탄 사람의 정보
        for info in timetableInfo {
            if throughput > 0 && 
            ((busTime[0] > info[0]) || 
            (busTime[0] == info[0] && busTime[1] >= info[1])) { // 태울 수 있다면
                throughput -= 1
                lastMan = remains.removeFirst()
            } else {
                break
            }
        }
        
        timetableInfo = remains
        if throughput > 0 { // 버스 자리가 널널하다면 그냥 탄다.
            result = busTime
        } else {    // 버스 자리 없을경우 마지막 탄 사람보다 1분 먼저 탄다.
            let minute = lastMan[1] - 1
            if minute >= 0 {
                result[0] = lastMan[0]
                result[1] = minute
            } else {
                result[0] = lastMan[0] - 1
                result[1] = 59
            }
        }
        
        let minute = busTime[1] + t
        if minute >= 60 {
            busTime[0] += 1
            busTime[1] = minute - 60
        } else {
            busTime[1] = minute
        }
    }
    
    return String(format: "%02d:%02d", result[0], result[1])
}

ポスト


等級より簡単な問題
これは,時間ベースで処理量検出を行う符号化テストのよくある問題形式である.
アルゴリズムや特殊な例外を考慮する必要はありません.
答えさえすればいい質問