develop   3년 전

7줄, 10줄

범위가 10000이기 때문에

i의 범위를 0~9999로 지정하고

self[0] = 1이 저장되도록 i+1을 해주었습니다.

m도 동일한 방식입니다.

19줄

상기 방식대로 배열에는 1 작은 값을 저장해야 하므로

self[result-1]을 저장했습니다.

그리고 result로 나온 값은 누군가의 셀프넘버 이므로

분류를 위해 self[result-1] 을 0으로 저장했습니다.

25줄, 26줄

self[i]가 0이 아닌 경우 -> 셀프 넘버가 없는 경우 를 출력했습니다.


왜 출력초과가 나오는지 잘 모르겠습니다 ㅠ

seico75   3년 전

위 소스를 출력해보면 문제의 답보다 훨씬 많은 값들이 출력됩니다. 

문제는 10보다 큰 숫자를 계산할 때 틀리는데, 10으로 만들어지는 수는 11인데, 위 소스에서는 20이 만들어지고, 

50으로 만들어지는 수는 55인데 위 소스는 100이 만들어집니다.

18라인의 c*10 부분에서 문제가 되는 것 같습니다.

두번째 문제는 9999 와 같은 숫자로 만들어지는 숫자는 10000 을 넘어가서 메모리 침범이 일어납니다.

develop   3년 전


답변 감사합니다.. 일단 c *10 도 고치고,


배열의 폭을 넓히고 모든 i의 범위를 0~9999까지 고정시켰는데요

그런데도 출력초과가 발생하네요.. 원인이 무엇일까요 ..?

develop   3년 전

출력초과까지 고쳤습니다. ㅠㅠ 

임시값을 저장해주지 않은 실수였네요 .. 근데 계산식은 틀린 부분이 없는거 같은데

뭐가 자꾸 틀렸을까요..

seico75   3년 전

1. 위 소스에서 m == 10 일때에는 23,24 모두 안타게 되겠네요.

tmp 가 10 미만이면 항상 c == 0 입니다.  따라서 tmp 에 대한 조건문이 의미가 없을 것 같습니다.

2. 셀프 넘버 확인 방법이 self 배열에 1을 넣는 것인데, 원래 1이 들어가 있으면 안될 것 같습니다.

   self 배열을 이렇게 쓸꺼면 11 라인에서 전부 0으로 초기화하는 것이 나을 것 같습니다.

3. self_num 함수가 int 리턴값을 줄거라고 하고는 아무값도 주지 않으니 비정상 동작을 하네요. (ideone.com 사이트에서..)

   이것도 수정이 필요합니다.

develop   3년 전

전부 다 수정했습니다 !

솔직히 이게 왜 함수문제인지 잘 모르겠어요 ㅠㅠ.. 제가 잘 못해서겠죠 ?

남의 코드 보는게 쉽지 않으실텐데 친절하게 하나하나 가르쳐주셔서 정말 감사합니다..

덕분에 많이 도움 됐어요.

혹시 진로 관련해서 질문 조금 드려도 될까요 ..?

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