https://www.acmicpc.net/problem/1408
[문제]
도현이는 Counter Terror Unit (CTU)에서 일하는 특수요원이다.
도현이는 모든 사건을 정확하게 24시간이 되는 순간 해결하는 것으로 유명하다.
도현이는 1시간 만에 범인을 잡을 수 있어도 잡지 않는다.
정확하게 24시간이 되는 순간이 아니면 잡지 않는 CTU 특수요원이다.
2008년 3월 3일 월요일, CTU는 새학기에 맞춰 핵폭탄을 날리겠다는 테러 정보를 입수했다.
CTU에서는 특수요원 도현이에게 이 임무를 맡겼다.
CTU의 프로그래머 준규는 이 사건의 배후가 김선영이란 것을 해킹을 통해 밝혀내었다.
도현이는 선영이를 임무를 시작한지 정확하게 24시간이 되는 순간에 잡으려고 한다.
만약 지금 시간이 13:52:30이고, 임무를 시작한 시간이 14:00:00 이라면
도현이에게 남은시간은 00:07:30 이다.
모든 시간은 00:00:00 ~ 23:59:59로 표현할 수 있다.
입력과 출력에 주어지는 모든 시간은 XX:XX:XX 형태이며, 숫자가 2자리가 아닐 경우에는 0으로 채운다.
도현이가 임무를 시작한 시간과, 현재 시간이 주어졌을 때,
도현이에게 남은 시간을 구하는 프로그램을 작성하시오.
[입력]
첫째 줄에는 현재 시간이, 둘째 줄에는 도현이가 임무를 시작한 시간이 주어진다.
임무를 시작한 시간과 현재 시간이 같은 경우는 주어지지 않는다.
[출력]
첫째 줄에 도현이가 임무를 수행하는데 남은 시간을
문제에서 주어지는 시간의 형태 (XX:XX:XX)에 맞춰 출력한다.
[예제 입력1]
13:52:30
14:00:00
[예제 출력1]
00:07:30
나의 풀이
hour1, min1, sec1 = map(int, input().split(":"))
hour2, min2, sec2 = map(int, input().split(":"))
total = (hour2*3600 + min2*60 + sec2) - (hour1*3600 + min1*60 + sec1)
if total < 0:
total += 60*60*24
real_hour = total // 3600
real_min = (total%3600)//60
real_sec = total%60
print("%02d:%02d:%02d" % (real_hour,real_min,real_sec))
해당 문제를 가장 쉽게 풀이할 수 있는 방법은 입력받은 시간을 모두 초(sec)로 변환하여 계산한 뒤에 시:분:초로 출력하는 것이다.
우선 현재 시간과 임무를 시작한 시간을 입력받고, 해당 시간들을 모두 초(sec)로 계산한 뒤 (임무 시작시간 - 현재 시간)으로 계산하여 total이라는 변수에 저장해준다.
- 1시간 : 3600초, 1분 : 60초
hour1, min1, sec1 = map(int, input().split(":"))
hour2, min2, sec2 = map(int, input().split(":"))
total = (hour2*3600 + min2*60 + sec2) - (hour1*3600 + min1*60 + sec1)
만약에 임무 시작시간 - 현재 시간이 0보다 작은 값이 나오게 된다면 24시간(3600초*24)*초(sec)를 더해준다. 그 이유는 남은 시간이 00:00:00 ~ 23:59:59의 형태로 주어지기 때문이다.
if total < 0:
total += 60*60*24
그리고 가장 중요한 시/분/초 계산을 해주면 된다.
1. 시간 : 전체 값이 초(sec)로 저장된 total 변수를 3600초로 나눈 값.
2. 분 : 전체 값을 3600초로 나눈 나머지를 60으로 나눈 값.
3. 초 : 전체 값을 60으로 나눈 나머지 값.
real_hour = total // 3600
real_min = (total%3600)//60
real_sec = total%60
마지막은 남은 시간을 표현해주는 방식으로 00:00:00의 형태로 출력을 해주어야 하기 때문에 "%02d"%(변수)를 사용하여 표현해주면 끝이 난다.
print("%02d:%02d:%02d" % (real_hour,real_min,real_sec))
'문제풀이' 카테고리의 다른 글
[프로그래머스] level1 로또의 최고 순위와 최저 순위(파이썬) (0) | 2022.05.24 |
---|---|
[프로그래머스] Level1 3진법 뒤집기 (파이썬) (0) | 2022.05.23 |
[백준] 1173번 파이썬 풀이 (0) | 2022.04.01 |
[백준] 1371번 파이썬 풀이 (0) | 2022.03.28 |
[백준] 1252번 파이썬 풀이 (0) | 2022.03.27 |