[백준] 1408번 - 24

김멉덥·2023년 7월 1일
0

알고리즘 공부

목록 보기
9/171
post-thumbnail

문제

브론즈 2 - https://www.acmicpc.net/problem/1408


코드 구현

정답 코드

## input
# 13:52:30
# 14:00:00

## output
# 00:07:30

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을 붙여준다.

profile
데굴데굴 뚝딱뚝딱 개발기록

0개의 댓글