백준 2884번 풀이

문제

기존 시각보다 45분 땡기기. 이게 한줄요약이다.

근데 나도 아침잠 많아서 알람 30분 땡기는데… 스누징 와 사실 그래도 피곤함… ㅋㅋㅋㅋㅋㅋ

풀이

일단 전제하고 가야 할 것이 있는데, 시간 계산은 일반적인 10진법이 아니다. 시간은 12진법(그래서 하루가 24시간), 분과 초는 각각 60진법이다. 그래서 10시 30분에서 45분을 빼게 되면

  1. 10:30-0:45
  2. 분이 -15분이 된다
  3. 시간에서 하나 받아내림한다 (시간은 9가 된다)
  4. 받아온 60분을 더하면 45분이 된다

이런 과정을 거치게 된다.

h,m=map(int,input().split(" "))
m=m-45
if m < 0: 
    h=h-1
    m=m+60
    print(h,m)
else: 
    print(h,m)

이건 일차적으로 분만 처리한 코드. 저거 그대로 내면 틀린다. 왜냐하면 위 논리대로 분에 대한 계산은 처리했으나, 시간에 대한 계산은 처리하지 않았기 때문에 0시 0분을 입력하게 되면 -1시가 나오게 된다.

h,m=map(int,input().split(" "))
m=m-45
if m < 0 and h != 0: 
    h=h-1
    m=m+60
    print(h,m)
elif m < 0 and h == 0: 
    h=h+23
    m=m+60
    print(h,m)
else: 
    print(h,m)

그래서 시간이 0시이면서 분에서 45를 뺐을 때 음수일 때에 대한 처리도 진행해야 한다. (24시간제라 23을 더했다. 0시를 다른 말로 24시라고도 하니까)