ehdbs20   3년 전

11번째 줄 if문안에서 s[i+1]을 넣으면 공백을 세서(결과값이 1 증가하는걸로 보아) 맞지않고 s[i+2]를 넣으면 답이 맞습니다. s[i+1]=='0'일 때 break;를 넣어두면 밑에 줄의 if문이 실행되지 않고 for문이 종료되어 결과값이 맞아야 한다고 생각하는데 s[i+1]일 때는 왜 안되는 건가요?

dldyddlwl   3년 전

문제조건에 문자열의 마지막에도 공백이 올 수 있습니다. 그리고 fgets는 문자열의 마지막에 \n을 붙여줍니다.

그렇다면, 만약에 S의 끝에 공백이 들어갔다면, 여기서 MAX는 받은 문자열의 총 길이라고 합시다.

S의 마지막은, S[MAX-1] = ' ' , S[MAX] = '\n', S[MAX+1] = '\0' 일 것입니다.

만약에, i+1으로 break를 건다면, i가 MAX일때까지 진행되므로, S[MAX-1], 즉, 마지막 공백마저 카운트해버립니다. ( 그러나 마지막 공백은 단어의 개수에 영향을 주지 않습니다. )

따라서, i+2로 break를 걸면, i가 MAX-1일때까지 진행되므로, S[MAX+1] = '\0' 이므로, MAX-1이 카운트 되기전에 break문으로 빠져나가게 됩니다.

결과적으로 마지막 공백을 세지 않기 때문에, 답이 나옵니다.

ehdbs20   3년 전

오 감사합니다! fgets가 \n을 붙여서 그런거였군요 명쾌한 답변 감사합니다!

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