[프로그래머스 LV3] 셔틀버스

Junyoung Park·2022년 8월 15일
0

코딩테스트

목록 보기
561/631
post-thumbnail

1. 문제 설명

셔틀버스

2. 문제 분석

문자열 파싱을 통해 시간을 정수로 만든 뒤 대기열에 도착하는 순서대로 정렬하자. 버스 시간표에 따라 아무런 이상이 없을 경우 버스에 타게 되는 순서를 배열을 통해 카운트, "마지막 버스"에 타게 될 경우를 얻어낼 수 있다. 마지막 버스에 자리가 남았다면 버스 도착 시간에, 자리가 없다면 마지막 버스에 마지막으로 도착하는 사람보다 1분 더 빨리 도착하기만 하면 된다.

3. 나의 풀이

func solution(_ n:Int, _ t:Int, _ m:Int, _ timetable:[String]) -> String {
    var timetable = timetable.map{convertTime($0)}.sorted(by: <)
    var start = 0
    var end = timetable.count - 1
    var busTime = convertTime("09:00") - t
    var busMembers = [[Int]]()
    var busMember = [Int]()
    var busTimetable = [Int]()
    
    for _ in 0..<n {
        busTime += t
        busTimetable.append(busTime)
        busMember = []
        if start <= end {
            for crew in start...end {
                let time = timetable[crew]
                if time <= busTime {
                    start += 1
                    busMember.append(time)
                    if busMember.count == m {
                        break
                    }
                }
            }
        }
        busMembers.append(busMember)
    }
    
    busMembers.reverse()
    busTimetable.reverse()
    
    for idx in 0..<busMembers.count {
        let bus = busMembers[idx]
        let limitTime = busTimetable[idx]
        
        if bus.count < m {
            let answer = convertTime(limitTime)
            return answer
        } else {
            let last = bus.last!
            let answer = convertTime(last - 1)
            return answer
        }
    }
        
    return ""
}

func convertTime(_ time: Int) -> String {
    let hour = time / 60
    let minute = time % 60
    let hourString = hour < 10 ? "0" + String(hour) : String(hour)
    let minuteString = minute < 10 ? "0" + String(minute) : String(minute)
    return hourString + ":" + minuteString
}


func convertTime(_ time: String) -> Int {
    let time = time.split(separator: ":").map{Int(String($0))!}
    let (hour, minute) = (time[0], time[1])
    return hour * 60 + minute
}
profile
JUST DO IT

0개의 댓글