Skip to content

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

Description

@hwangJi-dev

💬 문제

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{varstartTime=900varcornTime= startTime
vartimetable= timetable.map({Int($0.split(separator:":").joined())! }).filter({ $0 !=2359}).sorted(by:>)vartada=0foriin1...n {varm= 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 -1if cornTime %100>=60{
cornTime -=40}}}
startTime += t
if startTime %100>=60{
startTime +=40}}returnString(format:"%02d:%02d", cornTime /100, cornTime %100)}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions