문제
브론즈 2 - https://www.acmicpc.net/problem/1408
코드 구현
정답 코드
curr_hour, curr_min, curr_sec = map(int, input().split(':'))
start_hour, start_min, start_sec = map(int, input().split(':'))
current_time = (curr_hour * 60 * 60) + (curr_min * 60) + curr_sec
finish = (start_hour * 60 * 60) + (start_min * 60) + start_sec
if(current_time > finish):
finish += (24 * 60 * 60)
ans = finish - current_time
ans_hour = ans // 3600
ans_min = (ans % 3600) // 60
ans_sec = (ans % 3600) % 60
if(ans_hour < 10):
ans_hour = '0' + str(ans_hour)
if(ans_min < 10):
ans_min = '0' + str(ans_min)
if(ans_sec < 10):
ans_sec = '0' + str(ans_sec)
print(str(ans_hour)+':'+str(ans_min)+':'+str(ans_sec))
풀이
임무가 끝나는 시간
은 임무를 시작한 시간
의 24시간 이후이므로 시간 표기 상으로는 변화 없이 같다.
- 결론적으로는
임무가 끝나는 시간 - 현재 시간
을 하면 남은 시간이 나오게 된다.
- 이를 계산하기 위해서 초 단위로 통일하여
임무가 끝나는 시간
, 현재 시간
을 계산하고 이를 뺄셈해준 뒤,
다시 원래 단위로 돌려놔 주면 된다.
- 만약 임무를 시작한 시간(== 임무가 끝나는 시간)이 현재 시간보다 작다면, 뺄셈 시 음수가 나오게 되기 때문에 24시간을 초 단위로 바꾸어 더해준 뒤 계산해야 한다.
- 만약 계산한 값이 10보다 작을 때, 예를 들어 8이라면 그냥 8이 출력되면 안되고 08로 출력되어야 하기 때문에 0을 붙여준다.