Programmers_주차 요금 계산

Kyungtaek Oh·2022년 2월 6일
0

[Programmers] Problems

목록 보기
24/66

[2022 KAKAO BLIND RECRUITMENT] 주차 요금 계산

Link: https://programmers.co.kr/learn/courses/30/lessons/92341

문제 설명

주차장의 요금표와 차량이 들어오고(입차) 나간(출차) 기록이 주어졌을 때, 차량별로 주차 요금을 계산하려고 합니다. 아래는 하나의 예시를 나타냅니다.

요금표
기본 시간(분) 기본 요금(원) 단위 시간(분) 단위 요금(원)
180 5000 10 600

입/출차 기록
시각(시:분) 차량 번호 내역
05:34 5961 입차
06:00 0000 입차
06:34 0000 출차
07:59 5961 출차
07:59 0148 입차
18:59 0000 입차
19:09 0148 출차
22:59 5961 입차
23:00 5961 출차

자동차별 주차 요금
차량 번호 누적 주차 시간(분) 주차 요금(원)
0000 34 + 300 = 334 5000 + ⌈(334 - 180) / 10⌉ x 600 = 14600
0148 670 5000 +⌈(670 - 180) / 10⌉x 600 = 34400
5961 145 + 1 = 146 5000

입축력 예

Code | Python


def solution(fees, records):
    answer = []
    parkingLot = {}
    total_fees = {}
	
    #각 기록들을 " "를 기준으로 나누어서 저장한다.
    for x in records:
        time = x.split(" ")[0]
        hour_, min_ = time.split(":")[0],time.split(":")[1]
        number = x.split(" ")[1]
        act = x.split(" ")[2]

        #차가 주차장으로 들어올때
        if act == "IN":
            parkingLot[number] = int(hour_)*60 + int(min_)
            if number not in total_fees:
                total_fees[number] = 0
        
        #차가 주차장에서 나갈때
        else:
            total_fees[number] += int(hour_)*60 + int(min_) - parkingLot[number]
            del parkingLot[number] #주차장에서 제거

    #주차장에 남아있는 차들 23:59 기준으로 정산
    for car in parkingLot:
        total_fees[car] += 23*60+59 - parkingLot[car]

    #금액 계산 후 정답 리스트에 저장
    for keys in sorted(total_fees):
        
        #5000 + ⌈(334 - 180) / 10⌉ x 600 = 14600
        day_fee = fees[1]
        if (total_fees[keys] - fees[0]) % fees[2] == 0:
            day_fee += ((total_fees[keys] - fees[0])//fees[2]) *  fees[3]
        else: 
            day_fee += (((total_fees[keys] - fees[0])//fees[2])+1) *  fees[3]
        
        #기본요금이 안넘을 경우 > 기본요금을 채우기
        if day_fee <= fees[1]:
            day_fee = fees[1]

        answer.append(day_fee)
        
    return answer

코드 접근 방식

  1. 요금 정산은 분 단위로 하기 때문에 각각 자동차가 총 몇분동안 주차장에 머물렀는지 계산해주면된다. 딕셔너리를 이용하여 각 자동차 고유 넘버에 몇분동안 주차 했는지 total_fees에 저장해 줄것이다.
  2. 자동차가 "IN" 인지 "OUT"인지에 따라 계산을 달리해준다. 만약 IN이라면 들어온 시간을 저장해주고, OUT이면 들어왔던 시간과 비교하여 머무른 시간을 저장해준다.
  3. 자동차가 나가지 않고 계속해서 남아있는 경우가 있다. 그러한 차들은 23:59분 기준으로 정산을 해주면 된다.
  4. 각 자동차 별로 주차한 시간을 살펴보고 요금표 기준에 따라 정산을 해주면 된다.

Output | Screen Shot

profile
Studying for Data Analysis, Data Engineering & Data Science

0개의 댓글

관련 채용 정보