import Foundation func solution(_ plans: [[String]]) -> [String] { var tasks: [(name: String, start: Int, playTime: Int)] = [] func timeToMinutes(_ timeStr: String) -> Int { let components = timeStr.split(separator: ":").map { Int($0)! } return components[0] * 60 + components[1] } for plan in plans { let name = plan[0] let start = timeToMinutes(plan[1]) let playTime = Int(plan[2])! tasks.append((name, start, playTime)) } tasks.sort { $0.start < $1.start } var answer: [String] = [] var stack: [(name: String, remainingTime: Int)] = [] for i in 0..<(tasks.count - 1) { let currentTask = tasks[i] let nextTask = tasks[i + 1] var availableTime = nextTask.start - currentTask.start stack.append((currentTask.name, currentTask.playTime)) while availableTime > 0 && !stack.isEmpty { let lastIndex = stack.count - 1 var pausedTask = stack[lastIndex] if pausedTask.remainingTime <= availableTime { answer.append(pausedTask.name) availableTime -= pausedTask.remainingTime stack.removeLast() } else { pausedTask.remainingTime -= availableTime stack[lastIndex] = pausedTask availableTime = 0 } } } answer.append(tasks.last!.name) while !stack.isEmpty { answer.append(stack.removeLast().name) } return answer }