본문 바로가기

알고리즘 공부/알고리즘 구현 기초

백준) 오븐 시계-파이썬

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

(브론즈 3 문제)

 

2525번: 오븐 시계

첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)

www.acmicpc.net

입력

1.

14 30
20

2.

17 40
80

3.

23 48
25

출력

1.

14 50

2.

19 0

3.

0 13

내 코드

H,M=map(int,input().split())
T=int(input())
TH=T//60
TM=T%60
if(H+TH>=24):
    H=H+TH-24
    if(M+TM>=60):
        H=H+1
        M=M+TM-60
    else:
        M=M+TM
else:
    H=H+TH
    if(M+TM>=60):
        H=H+1
        if(H==24):
            H=0
        M=M+TM-60
    else:
        M=M+TM
print(H,M)

풀이(생각 과정)

시간이 24시가 넘어가는 경우와 넘어가지 않는 경우를 나누어서 풀었다.

넘어가는 경우의 시간(H)를 먼저 계산하고 그 후 분(M)을 계산했다.

 

시간 계산 전에는 24시가 넘어가지 않지만 분을 계산 후에 24시가 되는 경우까지 생각해서 16~17번째 줄에 시간을 다시 바꿔주는 작업을 진행했다.

 

개선된 다른 풀이

이 풀이의 경우 훨씬 간단하게 구현하였다.

시간과 분으로 계산을 따로따로 하는 것이 아니라 시간을 분으로 변환하고 분으로만 계산을 진행한 후 다시 시간과 분으로 변환해주는 방식으로 풀었다.

변환 후 시간이 24시를 넘어가는 경우 시간에 24를 빼서 시간을 계산했다.

# 2525 (오븐시계)
H, M = map(int, input().split())
T = int(input())

#주어진 시간과 걸리는 시간을 분으로 변환 후 계산한 결과
end = H*60 + M + T

#결과를 다시 시간과 분으로 변환하는 과정
H = end // 60
M = end % 60

#시간(H)이 24를 넘어가는 경우
if H > 23: H -= 24
  
print(H, M)

 

 

수학적 조건이 등장했을 경우 단순히 조건을 그대로 구현하는 것이 아닌 조건의 가공 과정을 통해서 훨씬 간단하게 구현할 수 있다는 사실을 알았다.