adorableyou26   2년 전

질문 글들을 읽어 보았으나 잘 모르겠습니다.

반례를 알려주시면 감사하겠습니다!

코린이의 어두운 눈을 밝혀주십시오..

wizardrabbit   2년 전

안녕하세요? 반례 드립니다:

입력:
1
aaba

정답:
0

출력:
1

▶ 틀린 이유 한 줄 요약: 17번째 줄에 있는 i++ 로 인해, for문의 i가 총 두 번 증가하게 되어 검사를 건너뛰는 경우가 발생합니다.

반례를 입력했을 때, 작성하신 코드는 이렇게 작동합니다: '^' 는 현재 검사하고 있는 문자를 의미합니다.

<<i = 0>>
aaba  / -> ' ' 와 'a'는 다르니, a 값이 1 증가하였습니다.
^

<<i = 1>>
aaba  / -> 'a' 와 'a'는 같으니, i 값이 1 증가하였습니다. 또한 for문의 새로운 루프를 돌 때도 i 값이 1 증가하므로 총 2가 증가합니다.
 ^

<<i = 3>>
aaba  / -> 'a' 와 'a' 는 같으니 위와 같은 이유로 i 값은 총 2가 증가합니다.
   ^

i 값이 충분히 크므로 루프는 여기서 끝납니다. alph 배열의 a값은 1, b값은 0이므로 프로그램은 1을 출력하게 됩니다.
이는 정답인 0과는 다른 결과입니다.

위의 과정을 보시면 아시겠지만, 문자 b를 검사하지 못 하고 건너뛰게 되어 잘못된 결과가 나옴을 알 수 있습니다.

문자열을 검사할 때는 이전 문자열과 같았든, 다르든 한 칸씩 검사해야 할 것입니다. 루프를 돌 때마다 i값은 이미 1씩 자동으로 증가하므로, 17번째 줄의 i++는 삭제되어야 할 것입니다. i 값이 루프 한 번에 2가 증가하면, 위와 같이 일부 문자열을 건너 뛰게 될 수 있으니까요.

문제 해결에 도움이 되었기를 바랍니다!

adorableyou26   2년 전

반례와 함께 세세한 설명까지,,정말 감사합니다!!!

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