Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Algorithm] [1차] 셔틀버스 #194

Closed
hwangJi-dev opened this issue Apr 10, 2023 · 0 comments
Closed

[Algorithm] [1차] 셔틀버스 #194

hwangJi-dev opened this issue Apr 10, 2023 · 0 comments

Comments

@hwangJi-dev
Copy link
Owner

hwangJi-dev commented Apr 10, 2023

💬 문제

https://school.programmers.co.kr/learn/courses/30/lessons/17678


💬 Idea

  • timetable을 시간순으로 내림차순 정렬한 뒤 2359를 필터링한다.
  • n만큼 돌면서 startTime에 t만큼을 더하여 셔틀의 출발 시간을 갱신한다.
    • 각 운행 당 태울 수 있는 최대 크루 수만큼 크루를 태우기 위해 m이 0이 될 때까지 timeTable을 popLast한다.
    • 이 때 가장 빨리 태워야하는(가장 먼저 줄을 선) 크루의 줄 선 시각이 현재 시각보다 늦을 경우 → 다시 timeTable에 tada를 append하고 반복문을 멈춘다.
  • 만약 현재가 마지막 운행 셔틀이라면 → 콘이 탈 수 있는 가장 늦은 도착 시간을 구한다
    • m이 남은 경우 → 크루가 줄을 선 가장 마지막 시각에 콘이 마지막으로 줄을 서면 탈 수 있다.
    • m이 남지 않은 경우 → 크루가 줄을 선 가장 마지막 시각에 콘이 마지막으로 줄을 서면 콘이 타지 못하고 버스가 떠나버리므로 → 크루가 줄을 선 가장 마지막 시각 - 1에 콘이 탑승해야 안전하게 도착할 수 있다!

💬 풀이

import Foundation

func solution(_ n:Int, _ t:Int, _ m:Int, _ timetable:[String]) -> String {
    var startTime = 900
    var cornTime = startTime
    var timetable = timetable.map({ Int($0.split(separator: ":").joined())! }).filter({ $0 != 2359 }).sorted(by: >)
    var tada = 0
    
    for i in 1...n {
        var m = m
        
        while m > 0 && !timetable.isEmpty {
            tada = timetable.popLast()!

            if tada <= startTime {
                m -= 1
            } else {
                timetable.append(tada)
                tada = startTime
                break
            }
        }
        
        if n == i {
            if m > 0 {
                cornTime = startTime > tada ? startTime : tada
            } else {
                cornTime = tada - 1
                if cornTime % 100 >= 60 {
                    cornTime -= 40
                }
            }
        }
        
        startTime += t
        
        if startTime % 100 >= 60 {
            startTime += 40
        }
    }
    
    return String(format: "%02d:%02d", cornTime / 100, cornTime % 100)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant