Skip to content

Commit 3a0bec6

Browse files
committed
programmers.co.kr 코딩테스트 연습 2022 KAKAO BLIND RECRUITMENT 주차 요금 계산
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/92341
1 parent 4b99648 commit 3a0bec6

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
from typing import List
2+
from collections import defaultdict
3+
4+
5+
def solution(fees: List[int], records: List[List]):
6+
gibon_time, gibon_fee, danwi_time, danwi_fee = fees
7+
8+
dt = {}
9+
parking_time = defaultdict(int)
10+
answer = defaultdict(int)
11+
12+
for item in records:
13+
time, plate, inout = item.split(' ')
14+
15+
if inout == 'IN':
16+
dt[plate] = time
17+
elif inout == 'OUT':
18+
time_in = dt[plate]
19+
time_in = HH_MM(time_in)
20+
time_out = time
21+
time_out = HH_MM(time_out)
22+
parking_time[plate] += (time_out - time_in)
23+
del dt[plate]
24+
25+
keys = list(dt.keys())
26+
for plate in keys:
27+
time_in = dt[plate]
28+
time_in = HH_MM(time_in)
29+
time_out = '23:59'
30+
time_out = HH_MM(time_out)
31+
parking_time[plate] += (time_out - time_in)
32+
33+
keys = list(parking_time.keys())
34+
for plate in keys:
35+
parking_fee = calculate_parking_fee(parking_time[plate], gibon_time, gibon_fee, danwi_time, danwi_fee)
36+
answer[plate] += parking_fee
37+
38+
# keys = list(dt.keys())
39+
# for plate in keys:
40+
# time_in = dt[plate]
41+
# time_in = HH_MM(time_in)
42+
# time_out = '23:59'
43+
# time_out = HH_MM(time_out)
44+
# parking_time = time_out - time_in
45+
#
46+
# parking_fee = calculate_parking_fee(parking_time, gibon_time, gibon_fee, danwi_time, danwi_fee)
47+
# answer[plate] += parking_fee
48+
# del dt[plate]
49+
50+
ans = []
51+
for plate in answer.keys():
52+
ans.append([plate, answer[plate]])
53+
54+
ans.sort(key=lambda x: x[0])
55+
ans2 = list(map(lambda x: x[1], ans))
56+
57+
return ans2
58+
59+
60+
def calculate_parking_fee(parking_time: int, gibon_time, gibon_fee, danwi_time, danwi_fee):
61+
parking_fee = 0
62+
63+
if parking_time > gibon_time:
64+
parking_time -= gibon_time
65+
parking_fee += gibon_fee
66+
67+
quotient, remainder = divmod(parking_time, danwi_time)
68+
if remainder > 0:
69+
quotient += 1
70+
71+
parking_fee += (quotient * danwi_fee)
72+
else:
73+
parking_fee += gibon_fee
74+
75+
return parking_fee
76+
77+
78+
def HH_MM(t: str):
79+
hour, minute = map(int, t.split(':'))
80+
return hour * 60 + minute
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from unittest import TestCase
2+
from main import solution
3+
4+
5+
class Test(TestCase):
6+
def test1_solution(self):
7+
self.assertEqual([14600, 34400, 5000], solution([180, 5000, 10, 600],
8+
["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",
9+
"23:00 5961 OUT"]))
10+
11+
def test2_solution(self):
12+
self.assertEqual([0, 591], solution([120, 0, 60, 591], ["16:00 3961 IN", "16:00 0202 IN", "18:00 3961 OUT", "18:00 0202 OUT", "23:58 3961 IN"]))
13+
14+
def test3_solution(self):
15+
self.assertEqual([14841], solution([1, 461, 1, 10], ["00:00 1234 IN"]))

0 commit comments

Comments
 (0)