HwangHub

[백준 / python] #3029. 경고 본문

카테고리 없음

[백준 / python] #3029. 경고

HwangJerry 2023. 2. 15. 00:03

https://www.acmicpc.net/problem/3029

 

3029번: 경고

첫째 줄에 현재 시간이 hh:mm:ss 형식으로 주어진다. (시, 분, 초) hh는 0보다 크거나 같고, 23보다 작거나 같으며, 분과 초는 0보다 크거나 같고, 59보다 작거나 같다. 둘째 줄에는 나트륨을 던질 시간

www.acmicpc.net

 

문제 해석

시계 문제로, 그냥 단순히 '기다리기 시작한 시간' 과 '폭탄을 던지는 시간'을 시간으로 관리하고 뺄셈만 해주면 되는 문제다.

 

문제 풀이

 

첫 번째 시도

h1, m1, s1 = map(int, input().split(":"))
h2, m2, s2 = map(int, input().split(":"))

start_time = h1 * 3600 + m1 * 60 + s1
event_time = h2 * 3600 + m2 * 60 + s2

if start_time > event_time:
	event_time += 86400

ans = event_time - start_time
h = str(ans // 3600).zfill(2)
m = str((ans % 3600) // 60).zfill(2)
s = str((ans % 3600) % 60).zfill(2)

print(f"{h}:{m}:{s}")

zfill은 시계 형식에 맞게 00:00:00 formatting을 위하여 적용한 함수이다. 그 외에는, 폭탄을 던지는 시간이 기다리기 시작한 시간보다 앞설 수는 없으므로 만약 폭탄을 던지는 시간이 더 앞선다면 이는 다음날을 의미한다고 고려하여 86400(24시간을 초로 환산한 값)을 더해주어 계산하였다.

 

결과는 틀렸습니다.(80%)였다.

 

두 번째 시도

h1, m1, s1 = map(int, input().split(":"))
h2, m2, s2 = map(int, input().split(":"))

start_time = h1 * 3600 + m1 * 60 + s1
event_time = h2 * 3600 + m2 * 60 + s2

if start_time >= event_time: # 적어도 1초를 기다려야 하고, 최대 24시간을 기다려야 하므로 등호를 추가해야 함.
    event_time += 86400

ans = event_time - start_time
h = str(ans // 3600).zfill(2)
m = str((ans % 3600) // 60).zfill(2)
s = str((ans % 3600) % 60).zfill(2)

print(f"{h}:{m}:{s}")

문제를 천천히 다시 보니, 조건에 최소 1초는 기다려야 한다는 조건이 있었다. 이 조건에 따라 만약 기다리기 시작한 시각과 폭탄을 던지는 시각이 같을 경우엔 24시간을 기다리는 경우라는 점을 처리해줘야 하는 것이라고 떠올리게 되었다. 따라서 등호만 추가해주었더니 정답을 받을 수 있었다.

Comments