티스토리 뷰
728x90
반응형
문제
차량의 입출차 기록을 통해 차량별 주차요금을 계산하는 문제이다.
주차요금은 요금표를 기준으로 기본 시간에 대한 기본 요금을 부여하고 초과한 경우 단위 시간당 당위 요금이 추가된다.
초과한 시간이 단위 시간으로 나누어 떨어지지 않는다면 올림으로 계산한다.
풀이
- 입차와 출차가 겹치는 경우가 없고, 입차와 출차 순서가 뒤집히는 경우도 없기 때문에 순차적으로 계산하기만 하면 간단히 주차 시간을 계산할 수 있다.
- 출차 시간에서 입차 시간을 뺀 값이 주차 시간임으로 총 주차 시간을 계산할 때 차량별로 입차 시간은 빼주고, 출차 시간은 더해주면 된다.
- 출차 기록이 없는 경우에는 23:59분으로 가정하고 계산해야 한다.
- 이때 차량의 주차 시간을 통해 출차 기록이 없다는 것을 판단할 수 있다.
- 입차 시간이 00:00 일 때는 주차 시간이 0, 그 이후 입차했다면 주차 시간이 음수가 된다.
- 따라서 주차 시간이 0 이하라면 출차 시간을 23:59분로 가정하고 1439분을 더한다.
- 주차 시간에 대한 요금 계산은 fees의 기본 시간, 기본 요금, 단위 시간, 단위 요금을 사용하면 된다.
- 주차 요금 = 기본 요금 + 단위 요금 x math.ceil( ( 주차 시간 - 기본 시간 ) / 단위 시간 )
- 단위 시간에 나누어 떨어지지 않으면 올림으로 계산한다.
Python 코드
import math
from collections import defaultdict
def solution(fees, records):
answer = []
base_time, base_fee, unit_time, unit_fee = fees
parking_info = defaultdict(int)
# 시간 문자열을 분으로 바꾸기
def to_minutes(x):
hh,mm = map(int,x.split(":"))
return hh*60+mm
# 시간에 대한 요금 계산하기
def calculate_fee(x):
fee = base_fee # 기본 요금
if x > base_time: # 기본 시간 이상 주차했다면 요금 추가
extra_time = x - base_time
fee += math.ceil(extra_time / unit_time) * unit_fee
return fee
for record in records:
hhmm, car_numb, status = record.split()
# 출차 시간 - 입차 시간
status = -1 if status == "IN" else 1
parking_info[car_numb] += to_minutes(hhmm) * status
for car_numb, parking_time in sorted(parking_info.items()): # 차 번호를 기준으로 오름차순
if parking_time <= 0: # 출차 기록이 없는 경우
parking_time += to_minutes("23:59")
answer.append(calculate_fee(parking_time))
return answer
문제출처
https://school.programmers.co.kr/learn/courses/30/lessons/92341
728x90
반응형
'Study > Coding Test' 카테고리의 다른 글
[백준 BOJ / Python] 2473번 세 용액 (0) | 2023.08.09 |
---|---|
[프로그래머스 / Java] 신고 결과 받기 (0) | 2023.07.31 |
[백준 BOJ / Python] 30805번 사전 순 최대 공통 부분 수열 (0) | 2023.07.11 |
[프로그래머스 / Python] 크레인 인형뽑기 게임 (0) | 2023.06.29 |
[프로그래머스 / Java] 숫자 문자열과 영단어 (0) | 2023.06.26 |
댓글