kate49143   2년 전

다 잘 나오는데 반례가 어느부분이 있는지 모르겟어요ㅠㅠㅠ

5%에서 틀렷다고 나옵니다.

a라는 리스트를 만들어서 생성자를 찾았습니다.

kimhs   2년 전

반례입니다

입력: 1000000

출력: 999959

정답: 0

kate49143   2년 전

감사드립니다!!

wizardrabbit   2년 전

안녕하세요?

윗 분 말씀대로 반례는 1000000이며 정상적인 출력은 0이지만 해당 코드에서는 999959가 출력되었습니다.

반례는 이미 있으니 왜 이러한 결과가 나왔는가를 설명드리겠습니다.

정상적인 코드에서는 이러한 방법으로 999959라는 수를 검사합니다:

반복문을 돌던 중 999959라는 수를 검사한다.
999999 + 9 + 9 + 9 + 9 + 5 + 9는 1000009이므로, 999959는 1000000의 생성자가 아니다.
결국 계속해서 1000000까지 수를 찾다가, 하나도 만족하는 결과가 없으므로 0을 출력한다.

그리고 작성하신 코드에서는 이러한 방법으로 999959라는 수를 검사합니다:

반복문을 돌던 중 999959라는 수를 검사한다.
999959에 9를 더한다. 999959 + 9는 999968이므로, 조건을 만족하지 않는다.
999968에 9를 더한다. 999968 + 9는 999977이므로, 조건을 만족하지 않는다.
999977에 9를 더한다. 999977 + 9는 999986이므로, 조건을 만족하지 않는다.
999986에 9를 더한다. 999986 + 9는 999995이므로, 조건을 만족하지 않는다.
999995에 5를 더한다. 999995 + 5는 1000000이므로, 조건을 만족한다. 999959는 1000000의 생성자이다.

이미 알고 계시겠지만, 생성자의 조건을 만족하려면 자기 자신 + 자신의 모든 자릿수를 다 더한 후 찾고자 하는 수가 되었는지를 검사해야 합니다.

작성하신 코드에서는 자릿수를 하나씩 더할 때마다 검사하는 상황이 되어, 모든 자릿수를 다 더하기도 전에 생성자를 찾은 것으로 인식하게 되어 문제가 발생한 것으로 보입니다.

이는 모든 자릿수를 더한 이후 한 번만 해당 수를 검사하도록 들여쓰기를 조금 수정하면 올바르게 작동할 것입니다.

문제가 해결되셨기를 바랍니다.

kate49143   2년 전

정말 감사합니다! 13번행과 14번행의 indent가 잘못 되었었군요!!!!!!!!!!!!!

정말감사드립니다!!

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