여러 조건문으로 분기시 check point

semi·2021년 9월 18일
0

Algorithm

목록 보기
2/2

백준 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=" ")

다음부터는 꼭! 기억하자

여러 조건문으로 분기했을때 가장 먼저 테스트 해야할 것은 그 모든 분기들이 실행되는 케이스들을 전부 테스트해보는 것이다!

0개의 댓글