https://programmers.co.kr/learn/courses/30/lessons/92341
from math import ceil
def time_calculator(records):
record_dic = {} #기록을 딕셔너리 형태로 저장합니다.
for record in records:
rec = record.split(" ")#각 기록을 띄어쓰기를 기준으로 나누고
time = rec[0].split(":")#시간을 :기준으로 나누어
total_time = int(time[0])*60 + int(time[1])#분으로 바꿔줍니다
if rec[1] not in record_dic:#딕셔너리에 없다면 처음에는 음수값으로 넣어줍니다
if rec[2] == "IN":
record_dic[rec[1]] = -total_time
else:
if rec[2] == "IN":#입장했을시
record_dic[rec[1]] = record_dic[rec[1]] - total_time#초출이 아니면 빼주고
else:
record_dic[rec[1]] = record_dic[rec[1]] + total_time#아니라면 더해줍니다
for rd in record_dic:#위의 과정은 마지막이 out이였는지 판별하기 위함인데 음수이면 아니고 양수이면 맞습니다
if record_dic[rd] <= 0:#즉 음수일때는 아니라고 가정하고 23:59분에 나간거 처리합니다.
record_dic[rd] = record_dic[rd] + (60*23 + 59)
return record_dic
def solution(fees, records):
answer = []
time = time_calculator(records) #기록을 수정합니다.
time_list = []
for t in time:
time_list.append([t, time[t]])
time_list.sort(key=lambda x:x[0])#출력조건에 따라 번호판이 작은 차부터 계산해주기 용이하게 바꿉니다
for tl in time_list:
if tl[1] <= fees[0]: #기본요금보다 작을때
answer.append(fees[1])
else: #기본요금보다 더 나왔을때 입니다.
answer.append(fees[1] + (ceil((tl[1]-fees[0])/fees[2]))*fees[3] )
return answer
'파이썬 코딩테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 / 신고 결과 받기 / 파이썬 (0) | 2022.02.24 |
---|---|
프로그래머스 / 수식 최대화 / 파이썬 (0) | 2022.02.18 |
프로그래머스 / 메뉴 리뉴얼 / 파이썬 (0) | 2022.02.17 |
프로그래머스 / 멀쩡한 사각형 / 파이썬 (0) | 2022.02.13 |
프로그래머스 / 괄호 변환 / 파이썬 (0) | 2022.02.13 |