백준2884 알람시계 using python

horiz.d·2021년 10월 22일
0

열어보며

저번 문제는 1회차 시도에서 오답을 제출하고나서야
검토에 모델을 사용하고 논리적 오류를 발견했다.

이번 문제에서는 문제를 풀기 전에 손으로 논리적인 모델을
만들어놓고 그대로 코드로 구현해보았다.

논리 모델

밑의 그림이 손으로 그려본 모델이다.

이는 표준화된 수도코드나 트리가 아닙니다.
아직은 머릿속 논리의 결들을 정리하는 단계라 나만의 표준을 적용시켜 표현했으니 너른 이해를 구합니다.


코드

그리고 아래는 이 모델을 바탕으로,
코드화 시킨 결과이다.

#입력
H, M = map(int,input().split())

#처리및출력
if M >= 45 :
  M - 45
elif M < 45 :
  residual = 45 - M
  M = 60-residual
  H -= 1
  if H < 0 :
    H = 23

print(H,M)

출력 테스트

음, 백준 예시 입출력 세가지를 모두
테스트해 보았을 때 출력이 정상적으로 나왔다.

1차 시도 결과 : 오답

자신있게 제출했는데.. 오답이라고 하네요ㅠ

왜 틀렸지 ?

아직 모르겠다 일단 두고 내일 중 추가하고자 한다
오늘은 알고리즘시간 다썼어요 안녕!


오류발견

조금 쉰 후, 임의로 여러 입력값을 돌려보다가
출력 오류를 발견했다.

1시 45분을 입력했으면 1시 00분이 나와야할 터,
45분이 그대로 출력됐다.

앞으로는 반복문을 이용한 테스트코드를 만들어서,
제출 전에 입출력 테스트를 확실히 해봐야겠다.



자동화 테스트 실시

  • TEST1) 00분부터 10분단위 증가로 5회 실시

해당 테스트는 옳은 출력을 보인다.



  • TEST2) 05분부터 10분단위 증가로 5회 실시 귀신이 곡할노릇이다. 자동화 테스트 결과로는 1시 45분 입력을 정상적으로 처리한다.



어쨌든 자동화 테스트 결과 & 논리적 검토결과
문제를 발견할 수 없어 혹시나 하는 마음으로 직전 코드를 그대로 다시 제출했다.


어찌된 일일까 틀렸다고하던 그 코드를
이제와서 맞았다고 한다.



이것이 오답처리된 1회차 시도의 코드이다 (수정)탭에서 찍은 사진이다.

아래는 갓 제출한, 똑같은 코드이다.
달라진 거라곤 #입력 이라는 주석 한줄 뿐이다.

어쨌든 성공인데..

누군가 원인을 안다면 꼭 알려주셨으면 합니다..
어쨌든 이번 문제는 찝찝함을 많이 남기며 끝이났습니다.

배운점

물론 이번 문제에서 직접적인 도움을 받지는 않았지만
테스트 코드를 작성해보고 그 중요성을 간접적으로나마 체험할 수 있었습니다.

그리고..정말 논리에 문제가 없다고 생각하면 재제출도 긍정적으로 생각해볼 필요가 있음을 알게됐습니다..ㅎㅎ

profile
가용한 시간은 한정적이고, 배울건 넘쳐난다.

0개의 댓글