jokerjin   2년 전

최대 최소 경계 값도 확인하고 여러 예제를 실행했을 때 무엇이 문제인지 확인할 수 없었습니다;;

혹시 코드 어떤 부분을 수정해야 할까요?

제 코드에 해당하는 반례가 무엇이 있을까요?

wizardrabbit   2년 전

안녕하세요? 디버깅 결과, 숫자의 개수를 세는 논리에는 문제가 없었습니다. 문제는 바로 입력된 데이터를 배열로 쪼개는 과정에 있었습니다.
입력으로 세 개의 수가 123, 456, 789가 주어지면, 코드는 이 수를 배열로 어떻게 쪼갤까요? 의도하신 대로 수를 쪼갠다면 5번째 줄까지 연산을 진행한 후 numbers 변수를 출력했을 때의 결과는 아래와 같아야 할 것입니다: 

[123, 456, 789]

하지만 실제로 코드를 디버깅해 보면 numbers 변수를 출력했을 때의 결과는 아래와 같습니다:

[123, 456, 789, 0]

있어서는 안 될 불필요한 0이 어디선가 추가되어 있고, 프로그램이 오작동을 할 것이 예상되겠네요! 그렇다면 저 0은 어디서 생긴 것일까요?

입력 데이터 : 123\n456\n789\n
개행 문자를 기준으로 쪼갠 이후 : ['123', '456', '789', '']
배열의 데이터들을 숫자로 바꾼 이후 : [123, 456, 789, 0]

즉, 입력 데이터의 마지막에 붙은 개행 문자로 인해 배열의 마지막에 빈 데이터가 생기고, 그것을 숫자로 바꾸는 과정에서 0으로 바뀌었음을 알 수 있겠네요. 결국 모든 문제는 저 불필요한 줄바꿈 문자가 지워지지 않아 생긴 문제였습니다.

코드에 불필요한 양 끝의 줄바꿈 문자 및 공백을 제거해 문자열을 다듬어주는 trim()을 사용하셨지만, 이미 데이터를 쪼갠 이후 사용하셨기 때문에 오류가 없어지지 않은 것으로 보입니다. 따라서 해당 오류를 없애기 위한 적절한 trim()의 위치는 데이터를 문자열로 바꾼 바로 직후라고 생각됩니다. 첨부된 코드를 확인해 보세요.

또한 이번 문제는 이 데이터를 입력받는 부분에서 발생한 오류기에, 만약 웹 브라우저에서의 개발자 도구를 이용하여 디버깅하셨다면 찾지 못했을 오류이기도 할 것입니다. 이에 저는 온라인에서 Node.js 코드를 디버깅할 수 있는 IDE 사이트들을 추천드리고 싶습니다. 디버깅을 위해 데이터를 미리 가공해야 하는 불편함을 없앨 수 있을 뿐만 아니라 의도치 않은 오류가 발생하는 것도 조기에 발견할 수 있습니다. 아래의 링크는 그 중 하나입니다:

https://www.jdoodle.com/execut...

(단 IDE 사이트에서 해당 코드를 사용했을 때 경로를 찾지 못 하는 오류가 발생했으니 (".\/dev/stdin") 을 ("/dev/stdin") 으로 바꿔주셔야 합니다)

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

jokerjin   2년 전

정말 너무너무 감사드립니다..

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