프로그래머스 LV2. 주차 요금 계산
✅ 프로그래머스 LV2. 주차 요금 계산
2022 KAKAO BLIND RECRUTMENT 문제다!
카카오 문제를 풀때는 그냥 이름만으로도 늘 짜릿해.
✅ 코드
레벨은 2지만 풀었을 때 점수는 1점만 주더라.
그만큼 쉬웠다는 말이겠지 ㅜㅠ 근데 진짜 쉽긴 했다...
import Foundation
func solution(_ fees:[Int], _ records:[String]) -> [Int] {
var dict: [String: String] = [:] // 차량번호 : 시간
var totalTimeArray: [String: Int] = [:] // 차량번호 : 누적시간
var priceDict: [String: Int] = [:] // 차량번호 : 금액
// records 내에서의 인덱스와 차랑번호를 저장
records.forEach { record in
let info = record.components(separatedBy: " ")
let carNumber = info[1]
if dict[carNumber] == nil { // 아직 IN하지 않았다면
dict[carNumber] = info[0]
if totalTimeArray[carNumber] == nil {
totalTimeArray[carNumber] = 0
}
} else { // 이미 차가 들어왔다면
// 계산하는 로직 수행해야 합니다.
let inTime = dict[carNumber]! // 이전에 들어왔던 시간
let time = calueteTime(fees: fees, inTime: inTime, outTime: info[0]) // 이번 구간에서 주차한 시간 계산
dict[carNumber] = nil // 출차 처리
if totalTimeArray[carNumber] == nil {
totalTimeArray[carNumber] = time
} else {
totalTimeArray[carNumber]! += time
}
}
}
dict.forEach { carNumber, value in
let inTime = dict[carNumber]!
let time = calueteTime(fees: fees, inTime: inTime, outTime: "23:59")
totalTimeArray[carNumber]! += time
dict[carNumber] = nil // 굳이 이 코드는 없어도 된다.
}
totalTimeArray.forEach { carNumber, time in
let time = time - fees[0] // 기본시간 빼주기
var price = fees[1] // 기본금액
if time <= 0 {
// 기본 금액만 내면 된다.
} else {
var count = time / fees[2]
if time % fees[2] != 0 {
count += 1
}
price += count * fees[3]
}
priceDict[carNumber] = price
}
var answer = priceDict.sorted { $0.key < $1.key }.map { $0.value }
return answer
}
func calueteTime(fees: [Int], inTime: String, outTime: String) -> Int{
let inTimeArray = inTime.components(separatedBy: ":").map { Int($0)! }
let outTimeArray = outTime.components(separatedBy: ":").map { Int($0)! }
let hour = outTimeArray[0] - inTimeArray[0]
let minute = outTimeArray[1] - inTimeArray[1]
return hour * 60 + minute
}
'알고리즘 문제 풀이' 카테고리의 다른 글
[Swift] 프로그래머스 LV2. [3차] 파일명 정렬 (0) | 2022.04.16 |
---|---|
[Swift] 프로그래머스 LV2. 방문 길이 (0) | 2022.04.16 |
[Swift] 프로그래머스 LV2. 큰 수 만들기 (4) | 2022.04.13 |
[Swift] 프로그래머스 LV2. 쿼드 압축 후 개수 세기 (0) | 2022.04.13 |
[Swift] BOJ 1753 최단경로 (0) | 2022.04.13 |