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 |