문제
https://school.programmers.co.kr/learn/courses/30/lessons/92341
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
입출력

해설
주차 요금 계산하는 프로그램을 작성하는 문제이다.
주차 요금은 계산은 다음 수식과 같이 계산한다.
주차 요금 = 기본 요금 + (전체시간 - 기본 요금 시간) / 단위 당 시간 * 단위 당 시간 금액
이것을 문제에서 주어진 매개변수를 통해서 표현하게 되면 다음과 같다.
주차 요금 = fees[1] + (total_time - fees[0]) / fees[2] * fees[3]
위에 수식에서 total_time - fees[0] 부분이 음수가 날 수가 있다.
그렇기 때문에 max를 통해서 음수가 되지 않고 최소가 0이 될 수 있도록 만들어 준다.
이제는 차가 들어올 때, 나갈 때에 맞춰서 입력에서 전체 시간을 구해준다.
그리고 나가지 않은 차가 있을 수 있기 때문에 해당 분기를 처리할 수 있도록 해주어야 한다.
그 뒤 전체 시간에 대한 금액을 계산해준다.
마지막으로는 차량 번호가 작은 자동차부터 리턴을 해야 하므로 정렬을 해주어서 값을 answer에 추가해주었다.
정답코드
더보기
'''
'25. 10. 18.(토)
1. fees[1] + ceil(max(전체 시간 - fees[0], 0)/10) * fees[3]
으로 계산하면 됨.
2. 차량 번호가 작은 자동차부터 리턴해야 된다.
'''
import math
def interpret_time(time: str) -> int:
hour, minutes = map(int, time.split(':'))
return hour * 60 + minutes
def get_gap_time(last_time: str, now_time: str) -> int:
return interpret_time(now_time) - interpret_time(last_time)
def solution(fees, records):
answer = []
#fees = [기본시간, 기본요금, 단위당 시간, 금액]
#1438
#461
# records = [
# "시간V차량번호V입출"
# ]
#차량 번호 : [입출, 시간, 마지막으로 들어온 시간]
save = {}
for record in records:
time, number, in_out = record.split()
save[number] = save.get(number, ["IN", 0, time])
if in_out == 'IN':
save[number][0] = 'IN'
save[number][2] = time
#나가는 것이라면
else:
save[number][0] = "OUT"
gap = get_gap_time(save[number][2], time)
save[number][1] += gap
save[number][2] = time
time_to_fee = {}
#아직 안 나간 차들이 있다면 나간 것 처리해주기
#1. fees[1] + ceil(max(전체 시간 - fees[0], 0)/10) * fees[3]
for key in save.keys():
if save[key][0] == 'IN':
gap = get_gap_time(save[key][2], '23:59')
save[key][1] += gap
#이제 금액 계산하기
time_to_fee[key] = fees[1] + math.ceil(max(save[key][1] - fees[0], 0) / fees[2]) * fees[3]
for key, value in sorted(time_to_fee.items(), key = lambda x: x[0]):
answer.append(value)
return answer
깃허브 : https://buly.kr/2qZHga4
'코딩테스트 > programmers' 카테고리의 다른 글
| 프로그래머스 / 정규표현식, 문자열 / [3차] 파일명 정렬 (0) | 2025.11.01 |
|---|---|
| 프로그래머스 / DP / 2 * n 타일링 (0) | 2025.10.19 |
| 프로그래머스 / DP / 숫자 변환하기 (0) | 2025.10.17 |
| 프로그래머스 / 구현 / 스킬트리 (0) | 2025.10.16 |
| 프로그래머스 / 스택 / 택배상자 (0) | 2025.10.14 |