rickmccoy   4년 전

0, 1, 100, 11111111111111111111111111111111111111111111111111111 등 생각할 수 있는 모든 테스트케이스를 넣어봤는데 문제없었습니다.

lego0901   4년 전

6번째 줄을

char a[1000001] = ...

로 바꿔주시고,

26번째 줄과 27번째 줄 사이

b[(j - 1) / 3 + 1] = '\0';

를 넣어주면 맞았다고 나옵니다.

(설명)

문자열은 그 끝을 '\0' char 기호로 표기합니다. 마치 마침표 기호와 같이 여기시면 됩니다. (영어론 sentinel 이라고 부르는 것으로 압니다.)  이 기호 덕분에 C에서 문자열을 출력할 때, 어디서 문자열이 끝나는 지 알고 정확한 길이만큼 출력하게 되는 것입니다. 즉, "elephant" 라는 문자열이 있으면, 그건 사실 {'e', 'l', 'p', 'h', 'a', 'n', 't', '\0'} 과 같은 것입니다.

%s 로써 scanf 를 받으면 자동으로 문자열의 맨 끝에 '\0' 기호가 붙습니다. 하지만 위 코드처럼 새로운 문자열(b)을 직접 만들려고 할 때는 쓰고자 하는 문자열 맨 끝에 '\0' 기호를 붙여주어야 합니다. 그 역할이 b[(j - 1) / 3 + 1] = '\0'; 코드입니다. (이 부분을 주석 처리하고 실행시켜보니 틀렸다고 나오네요.)

마찬가지로 a 배열의 길이를 하나 확장한 이유는(1,000,000->1,000,001) 입력되는 숫자의 길이가 최대 1,000,000 자리인데, 마침표 '\0' 기호를 맨 끝에 하나 더 붙이면 사실 1,000,001 자리까지 늘어날 수 있기 때문입니다.

rickmccoy   4년 전

감사합니다. 많이 배우고 갑니다.

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