[파이썬][백준][2884번] 알람 시계

2022. 1. 31. 20:55Algorithm/BaekJoon (Python)


- 문제

 

 


- 풀이

 

방법 1

H, M = map(int, input().split())
M -= 45
if H == 0:
    if M < 0:
        H = 23
        M += 60
        print(H, M)
    else:
        print(H, M)
else:
    if M < 0:
        H -= 1
        M += 60
        print(H, M)
    else:
        print(H, M)

 

 


 

 

 

방법 2

 

 

H, M = map(int, input().split())
if M >= 45:
    print(H, M - 45)
elif H > 0 and M < 45:
    print(H - 1, M + 15)
else:
    print(23, M+15)

 

방법 2는 머리를 조금 더 써서 방법 1을 단순화 시킨것이다. 근본적으로는 크게 다르지 않다.

M이 45일때를 기준, H가 0일때를 기준으로 생각하고 코드를 짰다.

두 지점에서 출력되어야할 코드가 달라지기 때문이다.

 

if M >= 45:
    print(H, M - 45)

 

M이 45보다 크면 단순하게 M에서 45를 빼서 출력해주면 된다.

이때는 H가 바뀔 필요가 없기 때문이다.

 

elif H > 0 and M < 45:
    print(H - 1, M + 15)

M이 45보다 작을 때는 H와 M 둘다에 변화가 있다.

45분전으로 알람을 맞추려고 하면 현재의 M에 15를 더해주기만 하면 된다.

 

이는 예를 통해 보면 더욱 쉽다

M = 40 일 때, 45분 전은 55분

M = 20 일 때, 45분 전은 35분

 

이렇듯 반대로 생각해서 15분을 더해주기만 하면 되는 것이다. 올림수 같은건 없으니 생각하기 편하다

또 H는 1이 작아지게 된다.

이것은 그냥 H - 1 로 코드를 짜면된다.

 

else:
    print(23, M + 15)

else는 H가 0일 때의 코드이다.

0시에서는 특이하게 H에서 한시간 전이 23이 되므로 따로 코드를 작성해준다.

 

 

 

 

 

 

 

 

방법 1을 사용하면 생각하기 쉽고, 방법 2를 사용하면 생각하기 어렵지만 코드가 짧아진다.

알고리즘 문제여서 방법 2도 생각해봤다..