셔틀버스 (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])
}
후기
레벨에 비해서 쉬웠던 문제.
시간 기준으로 처리량 체크하는 코딩테스트 단골 문제 형식이었다.
딱히 알고리즘이나 특이한 예외 생각할 것 없이
그냥 풀면 되는 문제.
Author And Source
이 문제에 관하여(셔틀버스 (Lv.3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@haze5959/프로그래머스-셔틀버스-Lv.3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)