skychl9358   2년 전

테케는 물론 여러 입력을 넣어봐도 잘만 출력되는데 틀렸다고 뜨네요

반례가 있을까요?

어떻게 고치면 완벽한 코드가 될 지 조언 부탁드립니다ㅠㅠ

wizardrabbit   2년 전

안녕하세요? 해당 코드를 디버깅해보았습니다. 반례입니다:

입력 : z
정답 : Z
출력 : ?

입력받은 문자열이 단 한 글자일 경우 출력이 ?로 나타나는 반례가 있습니다. 그 이유는 3번째 줄에서 입력값을 제대로 다듬어주지 않았기 때문입니다.

입력값이 z로 들어왔을 경우 이 결과를 의도하셨을 것입니다:

(val > max) max는 매우 작은 값, Z의 val값은 1이므로 조건 만족, max 값에 1을 대입하고 answer는 'Z' 가 된다.
더 이상 처리할 문자열이 없으므로 for문을 빠져나와 'Z'가 출력된다.

하지만 실제 결과는 이렇습니다:

(val > max) max는 매우 작은 값, Z의 val값은 1이므로 조건 만족, max 값에 1을 대입하고 answer는 'Z' 가 된다.
(val === max) max의 값은 1, \n의 val값 또한 1이므로 조건 만족, answer는 '?' 가 된다.

결과적으로 입력된 값의 문자열이 제대로 다듬어지지 않아 입력값이 'Z' 여야 하는데 'Z\n' 이 되어 불필요한 개행 문자가 포함되었습니다. 그 결과 \n도 문자열 취급이 되어 의도와 다른 결과가 나오게 되었네요.

Node.js로 문제를 푸실 경우 써서는 안 될 극소수의 몇몇 상황을 제외하고는, 데이터를 가져올 때 trim() 을 꼭 사용해 주세요. trim()은 문자열의 앞뒤에 있는 불필요한 공백, 개행 문자 등을 제거해 의도하지 않은 버그가 발생하는 것을 막아 줍니다.

문제가 해결되었기를 바랍니다!

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