백준 21942 부품 대여장

Hyunta·2022년 11월 18일
0
post-custom-banner

접근방법

  1. 날짜를 파싱해서 datetime으로 변경해준다.
  2. 시간 차이를 분으로 계산해서 벌금을 누적시킨다.

고생했던 점

  1. 입력을 여러번 받았을 때 기존값을 삭제하지 않아서 48%에서 해결이 안됐었다. pop으로 해결함
import sys
from collections import defaultdict
from datetime import datetime

input = sys.stdin.readline


def convert_datetime(date, time):
    year, month, day = map(int, date.split("-"))
    hour, minu = map(int, time.split(":"))
    return datetime(year, month, day, hour, minu)


n, l, f = input().split()

n, f = int(n), int(f)
fare_day, fare_time = l.split("/")
fare_hour, fare_min = map(int, fare_time.split(":"))
fare_time = (int(fare_day) * 1440) + (fare_hour * 60) + fare_min

rent = defaultdict()
fee = defaultdict(int)

for _ in range(int(n)):
    date, time, item, member = input().split()
    key_data = item + " " + member
    value_data = convert_datetime(date, time)

    if member not in rent:
        rent[member] = {}

    if item in rent[member]:
        start_datetime = rent[member].pop(item)
        diff_datetime = value_data - start_datetime
        diff_min = (diff_datetime.days * 1440) + (diff_datetime.seconds // 60)
        if diff_min > fare_time:
            fee[member] = fee.get(member, 0) + (diff_min - fare_time) * f
    else:
        rent[member][item] = value_data

if fee.keys():
    for key in sorted(fee.keys()):
        print(key, end=" ")
        print(fee.get(key))
else:
    print(-1)
profile
세상을 아름답게!
post-custom-banner

0개의 댓글