문제
https://www.acmicpc.net/problem/5575
직원의 출퇴근 시간을 관리하기 위해 타임카드를 사용한다. 타임카드에 출근 시간과 퇴근 시간을 기록하며, 24시간 제를 사용한다.
직원은 7시 이후에 출근하며 23시 이전에 퇴근한다. 퇴근 시간은 출근 시간보다 늦다.
직원 A, B, C의 출근 시간과 퇴근 시간이 주어졌을 때 각 지원의 근무시간을 계산하라.
풀이
내 풀이
1. 직원의 출퇴근 시각을 입력받는다.
2. datetime 모듈의 strptime 함수를 이용해 출퇴근 시간의 차를 구한다.
3. 초 단위의 출퇴근 시간 차(strptime.seconds)를 시 분 초 형태로 계산하여 출력한다.
4. 1-3번을 3번 반복한다.
코드
import sys
import datetime
for _ in range(3):
a = list(map(int, sys.stdin.readline().split()))
at = datetime.datetime.strptime(f"{a[3]}:{a[4]}:{a[5]}", "%H:%M:%S") - datetime.datetime.strptime(f"{a[0]}:{a[1]}:{a[2]}", "%H:%M:%S")
print(at.seconds // 3600, at.seconds // 60 % 60, at.seconds % 60)
초 단위의 시간차를 시, 분, 초로 계산하지 않고, 출력 형식만 적절히 변경하는 방법도 있다.
import sys
import datetime
for _ in range(3):
a = list(map(int, sys.stdin.readline().split()))
at = datetime.datetime.strptime(f"{a[3]}:{a[4]}:{a[5]}", "%H:%M:%S") - datetime.datetime.strptime(f"{a[0]}:{a[1]}:{a[2]}", "%H:%M:%S")
print(" ".join(str(at).split(":")))
다른 사람 풀이
기본적인 풀이 방식은 비슷하다. 다만 strptime 모듈을 사용하지 않고 시간 차를 초 단위로 직접 계산하는 방법도 있다.
for k in [0] * 3:
a, b, c, d, e, f = [int(k) for k in input().split()]
t = (d - a) * 3600 + (e - b) * 60 + f - c
print(t // 3600, t // 60 % 60, t % 60)