주차 요금 계산은 딕셔너리로 해결할 수 있는 구현 문제입니다
import Foundation
func solution(_ fees:[Int], _ records:[String]) -> [Int] {
var dics: [String: Int] = [:]
var cars: [String: Int] = [:]
var totalFees: [String: Int] = [:]
for record in records {
let info = record.split(separator: " ").map { String($0) }
let time = info[0].split(separator: ":").map { Int($0)! }
let minute = time[0]*60 + time[1]
let number = info[1]
let state = info[2]
if state == "IN" {
dics[number] = minute
} else if state == "OUT" {
if let inTime = dics[number] {
let parkingTime = minute - inTime
cars[number, default: 0] += parkingTime
dics.removeValue(forKey: number)
}
}
}
for dic in dics {
if let _ = cars[dic.key] {
let inTime = 1440 - dic.value
cars[dic.key]! += inTime
} else {
cars[dic.key] = 1439 - dic.value
}
}
for car in cars {
let totalFee = Int(Float(Float(car.value - fees[0]) / Float(fees[2])).rounded(.up)) * fees[3]
totalFees[car.key] = fees[1] + (totalFee < 0 ? 0 : Int(Float(Float(car.value - fees[0]) / Float(fees[2])).rounded(.up)) * fees[3])
}
let answer = totalFees.sorted(by: { $0.key < $1.key }).map { $0.value }
return answer
}
'Algorithm > programmers' 카테고리의 다른 글
프로그래머스 - 튜플 (0) | 2024.10.05 |
---|---|
프로그래머스 - [1차] 캐시 (1) | 2024.10.04 |
프로그래머스 - 두 큐 합 같게 만들기 (2022카카오 테크 인턴쉽) 시간초과 해결 (0) | 2024.10.04 |
프로그래머스 - 과제 진행하기 (0) | 2024.10.02 |
프로그래머스 - 제일 작은 수 제거하기, 시간초과 해결 (0) | 2024.09.27 |