wjinh   2년 전

왜 틀렸다고 나올까요?? 시간초과라면 이해 하겠는데

게시판 찾아보고 반례들 다 해봤는데 알맞은 값이 나왔습니다. 하지만 문제 돌리자마자 틀렸습니다가 나오더라구요 뭐가 문제일가요?

시간 초과라면 모르겠는데 이해하겠는데..

wizardrabbit   2년 전

안녕하세요? 반례 드리겠습니다:

입력 : 669
정답 : 2
출력 : 1

이러한 문제가 발생한 이유는, 바로 12번째 줄부터 시작하는 여러 개의 조건이 중복 적용되어서 입니다.

3개의 조건문을 적어 주셨는데, 모두 if를 통해 독립적으로 실행 여부가 결정되므로, 만약 조건문 두 개 이상이 모두 조건을 만족하게 된다면, 조건문이 중복해서 적용될 수 있습니다.

적어주신 코드 특성상 조건문이 중복해서 적용되면 하나의 숫자를 검사했는데 사용되는 플라스틱 숫자의 개수가 여러 개가 될 수도 있습니다. 그리고 위의 반례로 인해 조건문이 중복해서 적용되어 의도와 다른 결과가 나오게 된 것입니다.

하나의 조건이 만족해 플라스틱 숫자의 개수가 차감되었고 다른 조건문의 실행을 차단하려면, elif를 이용해 주시면 됩니다. 조건을 중복 적용시켜야 하는 코드가 아닌 이상, 대부분의 상황에서 if로만 여러 개를 쓰는 것보다 elif를 사용해 조건문이 중복 적용되는 것을 막는 것이 훨씬 안정적이라고 생각합니다.

반례 '669' 를 예로 잘못된 결과가 나오는 과정과 elif를 적용한 코드는 소스에 첨부하겠습니다.

문제가 해결되었기를 바랍니다!

wjinh   2년 전

기본적인부분에서 놓치고 있었네요.. 정성스러운 설명과 답변 정말 감사드립니다!!

댓글을 작성하려면 로그인해야 합니다.