[Swift]プログラマー(Lv 3)-[1本目]シャトルバス(2018 KAKAKAO BLIND RECRUITMENT)


こんにちは:
https://programmers.co.kr/learn/courses/30/lessons/17678



に答える


まず一番外側の複文が何なのかを決めます
問題はバスが全部でn回運行されていることです.どのバスも人を乗せなければならないので、1からnへ・・・
△もちろん、nを回すときにスケジュールの人を全部乗せたら、邪魔します.
でも.私たちはバスの出発時刻を基準にして、人を乗せることができるかどうかを見なければならないので、버스가 출발하는 시간に変えなければなりません.そうすれば、問題が解決できます.
=>一番外側の複文をbustime配列に並べましょう!
  • 便は09:00に発車します.
    09:00からt分間隔のbustime n.
  • HH:MMは分単位である.次に昇順で並べ替えます.
  • bustime配列でcount(現在乗っている人)がmより小さい場合(最大積載可能人数)
    indexとcountを増やします.
  • 1)count人が少ない場合ですよね?だから一番遅い時間で答えます
    一番遅く乗れる時間は何ですか?今はBustimeanswer = bustime2)count>=m
    満席の場合、バスに乗るべきですよね?コンイバスに乗るには、現在index-1人が到着する時間が1分未満でなければなりません.
    どうしてこんなことになったの?現在index位置である場合countがmを超え、countがmを超えない場合index-1位置である.(index-最初の人に載せる)
    でもconはそのindex-最初の人を超えてバスに乗るそれならindex-最初の人より到着時間が少ないでしょう?1分も早く到着すればtimes[index-1]-1に乗れます
    (一番遅い到着を求める時間なので1万引き.10分前に到着してもライブに乗れますが、それは一番遅い到着時間ではありません)answer = times[index-1] - 1
  • import Foundation
    
    func formatMinute(_ str: String) -> Int {
        let arr = Array(str)
        let hour = Int(String(arr[..<2]))!
        let minute = Int(String(arr[3...]))!
        return hour * 60 + minute
    }
    
    func solution(_ n:Int, _ t:Int, _ m:Int, _ timetable:[String]) -> String {
        let busTime: [Int] = {
            let start = 9 * 60
            var arr = [Int]()
            for num in 0..<n {
                arr.append(start + num * t)
            }
            return arr
        }()
    
        var index = 0
        let times = timetable.map { formatMinute($0) }.sorted()
        var answer = 0
        
        for bt in busTime {
            var count = 0
            
            while index < times.count && count < m && times[index] <= bt {
                index += 1
                count += 1
            }
            
            answer = count < m ? bt : times[index - 1] - 1
            
            if index > times.count { break }
           
        }
        let hour = String(format: "%02d", answer / 60)
        let minute = String(format: "%02d", answer % 60)
        
        return "\(hour):\(minute)"
    }