새로운 블로그로 이전 작업을 진행하고 있어 포스트가 새로 작성되고 있지 않습니다.

빠른 시일 내에 새로운 블로그로 인사드리겠습니다.

새로운 블로그 : https://unho.vercel.app/

본문 바로가기
알고리즘 문제풀이/Python

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

by 언호 2022. 2. 25.

📖 문제


🧑🏻‍💻 풀이 과정

1) 문제 이해 및 접근

입력으로 주어진 시간을 분으로 수정하여 딕셔너리에서 입차와 출차를 관리하였고, 누적 시간을 저장하였습니다.

마지막에 이 누적시간에 따라 요금을 계산하였습니다.

2) 알고리즘

  • 문자열

3) 풀이 코드

사용 언어 - Python

from math import ceil

def solution(fees, records):
    base_time, base_cost, per_time, per_cost = fees             # 기본 시간(분), 기본 요금(원), 단위 시간(분), 단위 요금(원)

    answer = []                 # 정답 리스트
    parking = {}                # 주차장에 차량이 있는지 없는지 여부, 키: 차량 번호, 값: 입차 시간
    times = {}                  # 차량별 주차장 이용 누적시간

    for record in records:
        time, car_number, case = record.split(' ')                      # 시간, 차량 번호, 입출차 여부
        
        time_minutes = int(time[:2]) * 60 + int(time[3:5])              # 문자열 시간을 분으로 변경
                
        if parking.get(car_number, -1) == -1:                           # 입차인 경우 입차 시간 기록
            parking[car_number] = time_minutes
        else:                                                           # 출차인 경우
            times[car_number] = times.get(car_number, 0) + (time_minutes - parking[car_number])     # 누적시간 변수에 추가
            parking.pop(car_number)                                     # 출차되었으면 주차장 변수에서 키값 삭제

    for key in parking.keys():                                          # 출차되지 않은 차량이 있으면
        times[key] = times.get(key, 0) + ((24*60-1) - parking[key])     # 23시 59분에 출차한것으로 기록

    for k in sorted(times.keys()):                                      # 차량 번호 순서대로
        minutes = times[k]                                              # 차량 번호 누적 시간
        cost = base_cost                                                # 기본 요금으로 적용

        if minutes > base_time:                                         # 기본 시간 초과시
            cost += ceil((minutes - base_time) / per_time) * per_cost   # 추가 요금 부과
        
        answer.append(cost)

    return answer

📝 결과 및 학습한 내용

1) 어려웠던 내용

입차시간이 0시 0분인 경우에 딕셔너리에 "차량번호: 0" 으로 기록하였습니다.

그러나 나중에 조건문에서 딕셔너리.get() 메서드를 사용할때 not 을 이용하여 조건문을 하였는데, 오류가 발생하여 예외 케이스가 발생하였습니다.

 

이 예외케이스를 찾는데 어려움을 겪었습니다.

2) 새롭게 학습한 내용

특별히 없습니다.


🔗 문제 링크

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

 

코딩테스트 연습 - 주차 요금 계산

[180, 5000, 10, 600] ["05:34 5961 IN", "06:00 0000 IN", "06:34 0000 OUT", "07:59 5961 OUT", "07:59 0148 IN", "18:59 0000 IN", "19:09 0148 OUT", "22:59 5961 IN", "23:00 5961 OUT"] [14600, 34400, 5000]

programmers.co.kr

 

 

※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다

'알고리즘 문제풀이 > Python' 카테고리의 다른 글

[백준] 12851 숨바꼭질 2  (0) 2022.02.27
[백준] 2512 예산  (0) 2022.02.26
[백준] 1300 K번째 수  (0) 2022.02.24
[프로그래머스] 징검다리 건너기  (0) 2022.02.23
[프로그래머스] 광고 삽입  (0) 2022.02.22

댓글