📖 문제
🧑🏻💻 풀이 과정
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
※ 오류 및 오타, 다른 의견이 있는 경우 댓글을 남겨주시면 감사하겠습니다
'알고리즘 문제풀이 > 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 |
댓글