문제
https://www.acmicpc.net/problem/21942
풀이
import sys
input = sys.stdin.readline
n,l,f = input().split()
n = int(n)
f = int(f)
x = l.split('/')
y = x[1].split(':')
l = int(x[0]) * 24* 60 + int(y[0]) * 60 + int(y[1])
day = [0,31,28,31,30,31,30,31,31,30,31,30,31]
time = [0]*n
dic = {}
result = {}
for i in range(n):
arr = input().split()
y,m,d = arr[0].split('-')
time[i] = (sum(day[:int(m)]) + int(d)) * 24 * 60
h,m = arr[1].split(':')
time[i] += (int(h) * 60 + int(m)) # 시간 구해줌
ss = arr[2] + '/' + arr[3] # 부품이름/동아리 회원 닉네임
if ss in dic: # 딕셔너리에 있으면 반납하는 것
tmp = time[i] - dic[ss] - l # 빌린 시간 - 벌금 부여 시간
del dic[ss] # 반납했으므로 삭제
if tmp > 0: # 벌금을 내야하면 result 딕셔너리에 벌금 추가하기
if arr[3] not in result:
result[arr[3]] = tmp * f
else:
result[arr[3]]+= tmp * f
else: # 딕셔너리에 없으면 빌리는 것
dic[ss] = time[i]
if len(result):
for i in sorted(result.items(),key=lambda x:x[0]):
print(*i)
else: print(-1)
빌린 시간과 반납시간을 분으로 바꿔주어서 풀어주었다.
dic은 빌린 여부 딕셔너리, result는 벌금 딕셔너리이다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #2979 - 트럭 주차 (0) | 2022.05.14 |
---|---|
[Python] 백준 #15787 - 기차가 어둠을 헤치고 은하수를 (0) | 2022.03.30 |
[Python] 백준 #2573 - 빙산 (0) | 2022.03.28 |
[Python] 백준 #12931 - 두 배 더하기 (1) | 2022.03.28 |
[Python] 백준 #2435 - 기상청 인턴 신현수 (0) | 2022.03.28 |