Skip to content
This repository was archived by the owner on Mar 18, 2024. It is now read-only.

Commit 204998c

Browse files
committed
Create 주차 요금 계산 sumin.py
1 parent 7cd7f2b commit 204998c

File tree

1 file changed

+80
-0
lines changed
  • Programmers/주차 요금 계산

1 file changed

+80
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
"""
2+
풀이시간: 20분
3+
4+
<input>
5+
- fees: 주차 요금 (fees의 길이 = 4)
6+
- fees[0]: 기본 시간(분)
7+
- fees[1]: 기본 요금(원)
8+
- fees[2]: 단위 시간(분)
9+
- fees[3]: 단위 요금(원)
10+
11+
- records: 자동차의 입/출차 내역 (1 ≤ records의 길이 ≤ 1,000)
12+
- 시각, 차량번호, 내역
13+
14+
<solution>
15+
- 단순 구현!!
16+
17+
<시간 복잡도>
18+
O(NlogN): 전체 코드 중 정렬이 가장 많은 시간 소요됨
19+
"""
20+
21+
import math
22+
23+
24+
def solution(fees, records):
25+
"""
26+
fees: 주차요금
27+
records: 자동차 입/출차내역
28+
"""
29+
answer = [] # 차량번호가 작은 자동차부터 청구할 주차 요금
30+
basic_time, basic_fee, unit_time, unit_fee = fees
31+
# 전체 차량
32+
cars = {}
33+
34+
for record in records:
35+
time, num, status = record.split()
36+
time = int(time[:2]) * 60 + int(time[3:]) # 시간을 분 단위로 변환
37+
if num not in cars:
38+
cars[num] = []
39+
cars[num].append(time)
40+
41+
# 출차 기록이 없으면 23:59에 출차된 것으로 간주
42+
for car, times in sorted(cars.items()):
43+
if len(times) % 2 != 0: # 입/출차 내역이 홀수이면 출차를 하지 않은 것
44+
cars[car].append(24*60-1)
45+
46+
minutes = 0 # 누적 주차 시간(분)
47+
while times:
48+
out_time = times.pop() # 출차 시간
49+
in_time = times.pop() # 입차 시간
50+
minutes += out_time - in_time
51+
52+
# 누적 주차 요금
53+
if minutes <= basic_time: # 기본시간 이하 -> 기본 요금
54+
total_fee = basic_fee
55+
else: # 기본 요금 + 단위 요금
56+
total_fee = basic_fee + math.ceil((minutes - basic_time) / unit_time) * unit_fee
57+
58+
answer.append(total_fee)
59+
60+
return answer
61+
62+
"""
63+
정확성 테스트
64+
테스트 1 〉 통과 (0.04ms, 10.5MB)
65+
테스트 2 〉 통과 (0.03ms, 10.4MB)
66+
테스트 3 〉 통과 (0.05ms, 10.4MB)
67+
테스트 4 〉 통과 (0.08ms, 10.4MB)
68+
테스트 5 〉 통과 (0.27ms, 10.3MB)
69+
테스트 6 〉 통과 (0.31ms, 10.3MB)
70+
테스트 7 〉 통과 (1.53ms, 10.5MB)
71+
테스트 8 〉 통과 (0.85ms, 10.5MB)
72+
테스트 9 〉 통과 (0.18ms, 10.5MB)
73+
테스트 10 〉 통과 (1.27ms, 10.6MB)
74+
테스트 11 〉 통과 (1.96ms, 10.8MB)
75+
테스트 12 〉 통과 (2.07ms, 10.7MB)
76+
테스트 13 〉 통과 (0.04ms, 10.4MB)
77+
테스트 14 〉 통과 (0.03ms, 10.4MB)
78+
테스트 15 〉 통과 (0.03ms, 10.3MB)
79+
테스트 16 〉 통과 (0.02ms, 10.3MB)
80+
"""

0 commit comments

Comments
 (0)