백준 2884번 문제를 해결하면서
주어진 테스트 케이스도 올바르게 돌아가고 입력값의 최대 최소값을 입력했을때의 케이스가 정상적으로 동작하는지도 다 확인했지만 채점결과가 틀렸다고 나왔다.
문법적 오류가 발생한것도 아니고 런타임에러가 있는것도 아니고 해서 그렇다면 반례가 있다는 것 일텐데 도저히 어느 부분이 잘못된건지 알 수가 없었다.
채점결과 틀린 코드는 우선 다음과 같다.
H, M = input().split(" ")
hour = int(H)
minute = int(M)
dif = minute-45
if dif < 0:
minute = 60+dif
hour = hour-1
elif dif == 0:
minute = minute
else:
minute = dif
if hour < 0:
hour = 23
else:
hour = hour
print(hour, minute, sep=" ")
그러다가 질의 응답을 통해 여러조건문으로 분기했을때 가장 먼저 테스트 해야할 것이 그 모든 분기들이 실행되는 케이스들을 전부 테스트해보는 것이라는 걸 알았다.
그렇게 다 확인을 해보니 8번째 줄의 elif dif==0 이라는 조건에서 조건을 만족하면 minute에 dif를 할당해주어야 하는데 minute를 그대로 넣어서 생긴 문제였다.
수정해서 정답으로 인정된 코드는 다음과 같다.
H, M = input().split(" ")
hour = int(H)
minute = int(M)
dif = minute-45
if 0 <= hour <= 23 and 0 <= minute <= 59:
if dif < 0:
minute = 60+dif
hour = hour-1
elif dif == 0:
minute = dif
else:
minute = dif
if hour < 0:
hour = 23
else:
hour = hour
print(hour, minute, sep=" ")
다음부터는 꼭! 기억하자
여러 조건문으로 분기했을때 가장 먼저 테스트 해야할 것은 그 모든 분기들이 실행되는 케이스들을 전부 테스트해보는 것이다!