[프로그래머스] 주차 요금 계산 - Swift

이창형·2023년 4월 14일
0

문제가 너무 길어 링크로 대체 하겠습니다.

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
}

회고

  • 단순 구현 문제였지만 오래 걸렸다
  • 문제 해결 능력을 더 키워야 할 것 같다
  • 그래도 단순 구현 문제는 시간만 주어지면 이제 풀 수 있는 것 같아서 성장한 것 같다
profile
iOS Developer

0개의 댓글