ljhee13   2년 전

테스트케이스는 잘 되는데 제출하면 오답이네요ㅠ

반례 있을까요?

wizardrabbit   2년 전

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

입력:
20
0

정답:
4

출력:
4
0

▶ 틀린 이유 한 줄 요약: trim() 미사용으로 인해 입력된 데이터에 붙은 '\n' 이 제거되지 않아 코드가 오작동하였습니다.

위 반례를 입력했을 때, 질문자님께서 예상하신 입력은 아래와 같을 것입니다:

"20\n0"

하지만 실제로는 줄바꿈 문자가 하나 더 붙어, 입력은 이렇게 주어집니다:

"20\n0\n"

그 결과 이런 식으로 코드가 작동하게 되어 코드가 오작동하게 됩니다. 지워지지 않은 줄바꿈 문자가 데이터의 한 칸을 차지하게 되면서, 원래였다면 pop() 을 통해 없어졌어야 할 마지막 줄의 0이 지워지지 않고 그대로 남게 됩니다.

"20\n0\n"
split 이후 -> ['20', '0', '']
pop 이후 -> ['20, '0']
map 이후 -> [20, 0]

Node.js의 readFileSync를 통해 입력을 받아올 경우 위와 같이 줄바꿈 문자가 같이 붙어서 입력으로 주어지므로, 대부분의 상황에서는 이러한 양끝의 불필요한 줄바꿈 문자 및 공백 문자를 지우기 위해 trim()을 사용하게 됩니다. 코드의 논리는 올바르므로 trim()만 사용해 주시면 문제를 해결하실 수 있을 것입니다. 사용 예시는 코드로 첨부했습니다.

https://developer.mozilla.org/... 에서 trim()에 대한 더 자세한 정보를 확인할 수 있습니다.

또한 F12를 눌러 나오는 개발자 도구를 이용하여 디버깅하실 경우 입력 데이터를 직접 입력하셔서 디버깅하시게 되므로, 위 반례와 같은 문제를 찾기 어렵습니다. https://www.jdoodle.com/execut... 와 같은 Node.js 컴파일러 사용을 하시는 것을 추천합니다. 도움이 되었기를 바랍니다!

ljhee13   2년 전

wizardrabbit 님 정말 감사드립니다.

덕분에 궁금증이 해결되었고 trim에 대해 알게되었습니다. 감사합니다.

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