adgap   2년 전

예시 입력이랑 출력결과 둘다 똑같이 나오는데 왜 틀렸다고 나오는지 잘 모르겠습니다..

혹시 반례나 이유를 여쭤봐도 될까요??

wizardrabbit   2년 전

안녕하세요? 확인 결과, 해당 코드는 trim() 미사용으로 인해 틀린 것을 확인했습니다.

trim() 미사용 문제에 대한 답변은 이미 한 적이 많아서, 설명은 링크로 대신하겠습니다.

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

https://www.acmicpc.net/board/...

adgap   2년 전

.toString뒤에 .trim()을 붙이니까 해결됬어요!!! ㅠㅜ 감사합니다 ㅜㅜㅜ

그러면 습관적으로 .toString말고 .toString.trim()으로 작성하는게 나을까요??

wizardrabbit   2년 전

네, 앞으로 Node.js로 문제를 푸실 때는 trim()은 거의 항상 사용하시면 될 거에요. 습관적으로 그러셔도 괜찮습니다. 입력으로 주어지는 마지막 줄바꿈 문자, 또는 불필요한 공백은 제거해야 하는 경우가 대부분이거든요.

단 trim()을 굳이 사용하지 않아도 되는 상황, 그리고 극소수지만 사용하면 안 되는 상황이 있으니 trim()의 역할 정도는 이해하시는 것을 추천드립니다.

▶ 굳이 사용하지 않아도 되는 상황은 주로 입력이 정수 하나만 들어올 때에요. 예시) https://www.acmicpc.net/proble...

이 경우는 입력받은 정수 하나를 문자열 형태에서 정수로 바꾸기 위해 parseInt()를 사용할텐데, 그 과정에서 문제를 일으키는 줄바꿈 문자는 없어지게 되므로 굳이 사용하지 않아도 괜찮아요. 예시로 든 문제에서 정수 하나를 입력받기 위해 사용하는 코드는 아래와 같아요.

const input = parseInt(require('fs').readFileSync('/dev/stdin'));

▶ 사용하면 안 되는 상황은 데이터에서 입력되는 공백 등이 불필요한 경우가 아닐 때에요. 예시) https://www.acmicpc.net/board/...

만약 입력으로 " abc " 가 주어지고, 입력받은 " abc " 를 그대로 출력하라는 문제가 주어졌다면, 여기서 입력받은 공백들은 답에 영향을 주는 중요한 공백들이므로 당연히 지워서는 안 됩니다. 이런 문제를 만나는 경우가 적기는 하지만, 주의하셔야 해요. 예시로 든 문제에서도 입력으로 주어진 데이터를 불필요한 줄바꿈 문자를 제거하겠다고 trim()을 썼다가 "필요한" 공백들까지 지워져서 제가 헤맨 적이 있었어요.

그러니 trim()은 기본적으로는 항상 사용하시되, "사용해서는 안 되는 상황" 인 경우가 아주 가끔 있을 수는 있으니 문제는 읽어보셔야 할 거에요.

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