from datetime import datetime
from collections import defaultdict
import sys
input = sys.stdin.readline
def convert_L(L):
day,arg = L.split('/')
day = int(day)
hour,min = map(int,arg.split(':'))
total_min = min + hour*60 + day*24*60
return total_min
N,L,F = list(input().split())
N = int(N)
F = int(F)
L = convert_L(L)
part_manager_dict = defaultdict(dict)
tardy_dict = defaultdict(int)
for _ in range(N):
total_string = input()
time_string = total_string[:16]
time_S = datetime.strptime(time_string,'%Y-%m-%d %H:%M')
part_name,person = total_string[16:].split()
if part_manager_dict[person].get(part_name):
borrowed_time = time_S - part_manager_dict[person][part_name]
day = borrowed_time.days
min = borrowed_time.seconds//60
to_time = day*60*24 + min
if to_time > L:
tardy_dict[person] += (to_time-L)*F
del part_manager_dict[person][part_name]
else:
part_manager_dict[person][part_name] = time_S
if len(tardy_dict.keys()):
key_list = sorted(tardy_dict.keys())
for key in key_list:
print(key,int(tardy_dict[key]))
else:
print(-1)
문제에 주어진 조건대로 빌리시간을 저장해놓고, 반환한 시간에 그 차이를 통해 지각을 하면, 지각을 한 비용을 추가해주면 된다.
여기서 python 유저들이 주의해야할점은 datetime 모듈이나 time 모듈을 쓰면 시간초과가 날 수가 있으니 조심해야하는 것이다.
제일 좋은 방법은 이 문제는 2021년으로 한정짓고 있기 때문에 문자열을 파싱해서 직접계산하는것이 더 빠를 것이다.
근데 파싱하는게 귀찮으므로, 이 풀이는 넘어가겠다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 21944 문제 추천 시스템 Version2 (0) | 2021.06.11 |
---|---|
[BOJ/백준] 21943 연산 최대로 (0) | 2021.06.11 |
[BOJ/백준] 21941 문자열 제거 (0) | 2021.06.11 |
[BOJ/백준] 21940 가운데에서 만나기 (0) | 2021.06.11 |
[BOJ/백준] 21939 문제 추천 시스템 Version1 (0) | 2021.06.11 |