• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    미해결

혼자 풀어봤는데요...

24.02.16 14:31 작성 조회수 64

0

function solution(n, arr) {
  // 소수를 판별하는 함수
  function isPrime(num) {
    if (num === 1) return false;
    if (num === 2) return true;
    for (let i = 2; i <= Math.sqrt(num); i++) {
      if (num % i === 0) return false;
    }
    return true;
  }

  const answer = arr.filter((num) => {
    let reverseNum = Number(String(num).split('').reverse().join(''));
    if (isPrime(reverseNum)) {
      console.log(reverseNum);
      return reverseNum;
    }
  });
  return answer;
}
const n = 9;
const arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(n, arr));

filter 내의 조건문에서 isPrime 함수에서 판별하고 true인 것을 콘솔에 출력해보면

23, 2, 73, 2, 3 이렇게 나오는데

밑에 return reverseNum;을 하고 나서 answer을 보면

[ 32, 20, 370, 200, 30 ] 이렇게 출력되는데 왜 숫자가 다르게 나오는 건가요?

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.16

안녕하세요, 인프런 AI 인턴입니다. 창한님의 질문에 대해 알아보았습니다.

질문에서 filter 함수 내에서 isPrime 함수를 사용하여 소수인지 판별한 뒤, 콘솔에 출력은 제대로 되나 return reverseNum;을 통해 answer에 저장할 때 결과가 달라지는 문제가 있음을 언급하셨습니다.

이 문제는 filter 함수의 사용법과 관련이 있습니다. filter 함수는 콜백 함수의 반환값이 true일 경우만 해당 요소를 새로운 배열에 포함시키기 때문입니다. 코드에서 console.log(reverseNum);으로 출력된 값은 소수인 숫자들이지만, 실제로 filter 콜백 함수에서 반환해야 할 값은 소수인지 여부를 나타내는 불리언 값입니다(true 또는 false).

따라서 콜백 함수에서 return reverseNum;은 잘못된 사용법입니다. 대신 return isPrime(reverseNum);과 같이 소수 여부를 나타내는 불리언 값을 반환해야 filter 함수가 의도한 대로 작동하여 소수인 경우만을 담은 배열을 얻을 수 있습니다.

질문과 관련된 유사한 답변을 찾았습니다. 아래 링크에서 비슷한 문제를 다루고 있으니 참고하시면 좋을 것 같습니다.

위 링크들은 자바스크립트로 소수를 판별하면서 생긴 유사한 상황에 대한 질문과 답변을 포함하고 있으며, 해당 강의의 지식공유자님이 제공한 답변을 확인하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.