[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人が少ない場合ですよね?だから一番遅い時間で答えます
一番遅く乗れる時間は何ですか?今はBustime
満席の場合、バスに乗るべきですよね?コンイバスに乗るには、現在index-1人が到着する時間が1分未満でなければなりません.
どうしてこんなことになったの?現在index位置である場合countがmを超え、countがmを超えない場合index-1位置である.(index-最初の人に載せる)
でもconはそのindex-最初の人を超えてバスに乗るそれならindex-最初の人より到着時間が少ないでしょう?1分も早く到着すればtimes[index-1]-1に乗れます
(一番遅い到着を求める時間なので1万引き.10分前に到着してもライブに乗れますが、それは一番遅い到着時間ではありません)
https://programmers.co.kr/learn/courses/30/lessons/17678
に答える
まず一番外側の複文が何なのかを決めます
問題はバスが全部でn回運行されていることです.どのバスも人を乗せなければならないので、1からnへ・・・
△もちろん、nを回すときにスケジュールの人を全部乗せたら、邪魔します.
でも.私たちはバスの出発時刻を基準にして、人を乗せることができるかどうかを見なければならないので、
버스가 출발하는 시간
に変えなければなりません.そうすれば、問題が解決できます.=>一番外側の複文をbustime配列に並べましょう!
09:00からt分間隔のbustime n.
indexとcountを増やします.
一番遅く乗れる時間は何ですか?今はBustime
answer = bustime
2)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)"
}
Reference
この問題について([Swift]プログラマー(Lv 3)-[1本目]シャトルバス(2018 KAKAKAO BLIND RECRUITMENT)), 我々は、より多くの情報をここで見つけました https://velog.io/@kerri/Swift-프로그래머스Lv3-1차-셔틀버스-2018-KAKAO-BLIND-RECRUITMENTテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol