안녕하세요? 반례 드립니다:
입력: 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년 전
질문 글들을 읽어 보았으나 잘 모르겠습니다.
반례를 알려주시면 감사하겠습니다!
코린이의 어두운 눈을 밝혀주십시오..