728x90
https://school.programmers.co.kr/learn/courses/30/lessons/92341
어려운 문제는 아니지만..
구현하는데 시간이 1시간정도 걸렸다 흑흑
조건에 따라서 열심히 구현해주면 된다..
시간 계산할때는 분 먼저 계산하고 시간을 계산하는식으로 했다
이거 이번에 카카오 블라인드에 나왔는데 기억하면 좋을 것 같다
그리고 defaultdict 를 사용하니깐 딕셔너리에 key가 없고 처음일 때도 += 연산자를 사용할 수 있어서 미리 딕셔너리 에러를 피할 수 있다
from collections import defaultdict
def solution(fees, records):
answer = []
parking_in = {}
parking_record = defaultdict(int) # 현재까지의 total min
result = {} # 요금 계산한 결과
for record in records:
t, car, status = record.split() # 공백열로 자르기
if status == 'IN':
parking_in[car] = [t]
else: # out
start = parking_in[car].pop(0)
sh, smm = start.split(':')
eh, emm = t.split(':')
if int(emm) >= int(smm):
rmm = int(emm) - int(smm)
rh = int(eh) - int(sh)
parking_record[car] += rmm + rh*60
else:
rmm = int(emm) + 60 - int(smm)
rh = int(eh) -1 - int(sh)
parking_record[car] += rmm + rh*60
# for 문으로 parking in 돌면서 아직 남아 있는거 있으면 out 시간 23:59로 간주하고 계산하기
for key, value in parking_in.items():
if len(value) == 1:
temp = value.pop(0)
sh, smm = temp.split(':')
rmm = 59 - int(smm)
rh = 23 - int(sh)
parking_record[key] += rmm + rh * 60
# 요금계산해서 result 완성하기
for key, value in parking_record.items():
if value <= fees[0]:
result[key] = fees[1] # 기본요금
else:
result[key] = fees[1] # 기본 요금
temp = value - fees[0]
a = temp // fees[2]
b = temp % fees[2]
if b == 0:
result[key] += a*fees[3]
else:
result[key] += (a+1) * fees[3]
# answer에 오름차순으로 넣기
for key, value in result.items():
answer.append((key, value))
answer.sort()
result2 = []
for data in answer:
result2.append(data[1])
return result2
728x90
'Algorithm (PS)' 카테고리의 다른 글
[카카오] 성격 유형 검사하기 Python 풀이 (0) | 2022.09.26 |
---|---|
[백준] 16987 계란으로 계란치기 - 백트래킹, Python (0) | 2022.09.26 |
[백준] 14382번 숫자세는 양 Python (1) | 2022.09.26 |
[백준] 16926 배열돌리기 1 Python (0) | 2022.09.25 |
kakao 두 큐 합 같게 만들기 Python (3) | 2022.09.24 |