백준 파이썬 2884번 문제 풀이

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

 

2884번: 알람 시계

문제 상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지

www.acmicpc.net

 

문제가 길지만 간단히 말해 보자면,

아침에 잘 못 일어나는 상근이가 알람들을 모두 45분씩 시간을 당겨 다시 맞추려고 하는데

이때 현재 맞춰진 알람 시간을 넣으면 - 45분씩 계산해주는 프로그램을 if문을 사용하여 만들어달라고 한다.

(9시 45분 -> 9시 00분)

 

문제의 규칙은 코드 첫 줄엔 현재 맞춰진 알람시간을 두 정수 H와 M으로 받아와야 하고

입력시간은 24시간 표현(오후 1시 -> 13시)을 사용해야 한다.

 

 


 

백준 파이썬 알람시계 문제 코드 풀이

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

현 알람의 시간과 분을 h와 m으로 입력받는다. (hour, minute)

조건 첫째, 받아온 시간의 분이 45분이거나 45분보다 클경우엔 그냥 분에서 45만 빼어 출력해주면 된다. (10시 45분 -> 10시)

 

조건 둘째, 받아온 시간의 분이 45분보다 작을 경우엔 1시간 = 60분 임으로 분 계산만으로 끝나지 않고

시의 뺄셈도 필요해진다. (10시 30분 ->??? ) 60분과 45분은 15분만큼의 차이가 남으로 현재 시간의 분에서 15만큼만 더해주고 시는 한 시간 빼어 주면 된다. (10-1시 30+15분)

 

조건 셋째, 위 두 가지 조건에 해당하지 못하는 시간은 24시를 넘기는 시간뿐임으로 나머지는 23시 분+15해 주면 간단히 해결된다.

 

 


 

오답 예시

H, M = map(int,input().split())
time = M + (H * 60) - 45
if H * 60 + M < 1440 :
    print("%d %d" % (time/60, time%60))
else :
    print("error")

위의 소스코드는 본인이 문제를 풀때 했던 실수이다.

문제를 똑바로 읽고 정확하게 프로그램으로 옮기는게 목표이기 때문에

백준 온라인 저지는 문제에 쓰여진 그대로 프로그램을 짜야 정답처리가 된다.

 

본인은 문제에 있지도 않은 에러를 출력하는 부분을 집어 넣었으며,

단순무식하게 계산은 변수 하나에 다 때려넣어놨다.

 

굳이  설명을 해보자면 1시간 = 60분인것을 이용해 입력받은 시각시간의 분 으로 바꿨으며

( 10시 45분 = 10시간 45분 = 645분  )

여기서 45분을 빼 다시 60으로 나눠지는  와 60으로 나눠서 남는 나머지 으로 되돌렸다.

( 600분 / 60 = 10)시 (600분 % 60 = 0)분

이과정을 변수 하나에 다 때려 박으니 당연히 if문을 사용하는 문제에 if가 쓸대가 없더라..

이걸 if문에 꾸역꾸역 맞추느라 24시 @@분은 없다라는 조건이 추가되고 에러출력도 들어갔다.

 

문제를 정확하게 읽고 지시하고 있는 그대로 프로그램으로 써내리는게 어려운것 같다.

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기