티스토리 뷰
문제
https://school.programmers.co.kr/learn/courses/30/lessons/92341
풀이
- 단순 구현 문제
- 출입 기록은 순차로 들어오기때문에 따로 정렬해줄 필요는 없음
- 차량 번호 별로 분리를 하고 주차된 시간을 초로 기록하여 금액을 계산
- 딕셔너리를 사용하면 차량번호로 편하게 관리가능하다
전체 코드
import Foundation
func solution(_ fees: [Int], _ records: [String]) -> [Int] {
var recordsDic: [String : [Int]] = [:]
var fee: [String : Int] = [:]
// 차량 출입기록 정리
for record in records {
let arr = record.split(separator: " ").map{ String($0) } // input 분리
let times = arr[0].split(separator: ":") // 시,분 분리
recordsDic[arr[1], default: []].append(Int(times[0])! * 60 + Int(times[1])!) // 출입 시간을 초단위로 저장
}
// 나간 기록이 없는 차량은 23:59에 나간걸로 처리
for record in recordsDic {
if record.value.count % 2 == 1 { // 들어가고 나간 기록이 있으면 짝수
recordsDic[record.key]?.append(23*60+59)
}
}
// 주차된 시간을 구함 -> 시간을 요금으로 바꿈
for record in recordsDic {
var idx: Int = 0
// 주차 시간을 저장
while idx < record.value.count {
fee[record.key, default: 0] += (record.value[idx+1] - record.value[idx])
idx += 2
}
var result: Int = 0 // 주차 요금 = (주차시간 - 기본주차시간) / 단위시간 * 단위요금
if fee[record.key]! <= fees[0] { // 기본 시간 이하로 주차
result = fees[1] // 기본요금만 내면됨
}
else if (fee[record.key]! - fees[0]) % fees[2] != 0 { // 올림이 필요한 경우
result = fees[1] + ((fee[record.key]! - fees[0]) / fees[2] + 1) * fees[3]
}else { // 올림이 필요하지 않는 경우
result = fees[1] + (fee[record.key]! - fees[0]) / fees[2] * fees[3]
}
// 주차 요금을 저장
fee[record.key] = result
}
return fee.sorted(by: { $0.key < $1.key }).map{ $0.value }
}
'PS > 문제 풀이' 카테고리의 다른 글
| [프로그래머스/Swift] 154538번 - 숫자 변환하기 (0) | 2025.02.27 |
|---|---|
| [프로그래머스/Swift] 43162번 - 네트워크 (0) | 2025.02.26 |
| [프로그래머스/Swift] 131704번 - 택배상자 (0) | 2025.02.24 |
| [프로그래머스/Swift] 17684번 - 압축 (0) | 2025.02.17 |
| [프로그래머스/Swift] 17687번 - n진수 게임 (0) | 2025.02.16 |
