https://school.programmers.co.kr/learn/courses/30/lessons/92341
import Foundation
func solution(_ fees:[Int], _ records:[String]) -> [Int] {
var records = records
// 차의 입차 내역의 번호와 시간 저장
var inTime = [String:Int]()
// 차의 번호와 차가 주차장에 총 몇분 있었는지에 대한 시간 저장
var result = [String:Int]()
var answer = [Int]()
for i in records {
// string처리 과정에서 차 번호와 시간을 구한다
let recordsArr = i.split(separator: " ")
var carNumber = recordsArr[1]
var getTime = recordsArr[0].split(separator: ":")
var time = Int(getTime[0])! * 60 + Int(getTime[1])!
// suffix를 활용하여 IN인지 OUT인지 구분
if i.suffix(2) == "IN" {
// inTime에 차 번호와 시간 저장
inTime[String(carNumber)] = time
} else {
// inTime에 있는 차 번호와 대치하여 시간을 계산하고 result에 저장
result[String(carNumber)] = (result[String(carNumber)] ?? 0) + time - (inTime[String(carNumber)] ?? 0)
inTime.removeValue(forKey: String(carNumber))
}
}
// 문제에 따르면 입차하고 출차안한 차도 있기 때문에 확인하고 계산
if !inTime.isEmpty {
for (key, value) in inTime{
result[key] = (result[key] ?? 0) + (23 * 60 + 59 - value)
}
}
// 차 번호 순서대로 정렬
// 정렬되면 튜플
var sortResult = result.sorted { $0.0 < $1.0 }
// 시간으로 주차비를 계산하는 함수
func calMoney (_ time: Int) {
if time <= fees[0] {
answer.append(fees[1])
} else {
var changeTime = time - fees[0]
if changeTime % fees[2] == 0 {
answer.append(changeTime / fees[2] * fees[3] + fees[1])
} else {
answer.append(changeTime / fees[2] * fees[3] + fees[3] + fees[1])
}
}
}
for i in sortResult {
calMoney(i.value)
}
return answer
}