문제 설명
문제 설명
주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.
- 요금표
- 입/출차 기록
- 자동차별 주차 요금
- 어떤 차량이 입차된 후에 출차된 내역이 없다면, 23:59에 출차된 것으로 간주합니다.
- 0000번 차량은 18:59에 입차된 이후, 출차된 내역이 없습니다. 따라서, 23:59에 출차된 것으로 간주합니다.
- 00:00부터 23:59까지의 입/출차 내역을 바탕으로 차량별 누적 주차 시간을 계산하여 요금을 일괄로 정산합니다.
- 누적 주차 시간이 기본 시간이하라면, 기본 요금을 청구합니다.
- 누적 주차 시간이 기본 시간을 초과하면, 기본 요금에 더해서, 초과한 시간에 대해서 단위 시간 마다 단위 요금을 청구합니다.
- 초과한 시간이 단위 시간으로 나누어 떨어지지 않으면, 올림합니다.
- ⌈a⌉ : a보다 작지 않은 최소의 정수를 의미합니다. 즉, 올림을 의미합니다.
주차 요금을 나타내는 정수 배열 fees, 자동차의 입/출차 내역을 나타내는 문자열 배열 records가 매개변수로 주어집니다. 차량 번호가 작은 자동차부터 청구할 주차 요금을 차례대로 정수 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
제한사항
- 문제를 확인해주세요
내가 푼 풀이
- Dictionary[String: [String]] 으로 해당하는 차량번호의 기록들 끼리 저장하고
- Dictionary[String: int] 로 해당 차량의 주차 이용시간들을 계산해서 정리한다.
- 정리된 주차이용시간들을 요금표로대로 계산하고 출력한다.
import Foundation
func solution(_ fees:[Int], _ records:[String]) -> [Int] {
var dict = [String: [String]]()
var resultDict = [String: Int]()
var resultArr = [Int]()
for i in records {
var arr = i.split(separator: " ").map{String($0)}
if dict[arr[1]] == nil {
dict[arr[1]] = [arr[0], arr[2]]
} else {
dict[arr[1]]! += [arr[0], arr[2]]
}
}
for i in dict {
var arr = i.value
var sum = 0
for j in 0..<arr.count / 2 {
var idx = j * 2
var strArr = arr[idx].split(separator: ":").map{Int(String($0))!}
var num = strArr[0] * 60 + strArr[1]
if arr[idx+1] == "IN" {
sum -= num
if idx+2 == arr.count {
sum += 1439
}
} else {
sum += num
}
}
resultDict[i.key] = sum
}
for i in resultDict.sorted{$0.key < $1.key} {
var sum = fees[1]
if i.value <= fees[0] {
resultArr.append(sum)
} else {
sum = sum + (Int(ceil(Double(i.value - fees[0]) / Double(fees[2]))) * fees[3])
resultArr.append(sum)
}
}
return resultArr
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [1차] 프렌즈4블록 Swift (0) | 2023.04.13 |
---|---|
[프로그래머스] [3차] 파일명 정렬 Swift (0) | 2023.04.13 |
[프로그래머스] 압축 Swift (0) | 2023.04.13 |
[프로그래머스] 할인 행사 Swift (0) | 2023.04.13 |
피로도 Swift (0) | 2023.04.13 |