문제

 

풀이 코드

function solution(left, right) {
  let sum = 0;

  for (let num = left; num <= right; num++) {
    if (primeCount(num)) sum += num;
    else sum -= num;
  }
  return sum;
}

function primeCount(n) {
  let prime = [];

  if (n % Math.sqrt(n) === 0) {
    prime.push(Math.sqrt(n));
  }

  for (let i = 1; i < Math.sqrt(n); i++) {
    if (n % i === 0) {
      prime.push(i);
      prime.push(n / i);
    }
  }
  return prime.length % 2 === 0;
}

 

풀이 과정

약수를 구하는 함수를 따로 만들어, left 부터 right 까지 해당 함수로 보내고,

각 수의 약수를 구한뒤, 약수를 담은 배열의 길이가 짝수이면 true, 홀수이면 false 를 반환하게 했다.

 

간단한 문제지만 조금더 간단히 구현할 수 있지 않을까? 생각이 들었다.

그래서 다른사람의 풀이를 봤는데

 

다른사람의 풀이

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

내가 너무 깊게 생각을 했다.

 

약수를 구하는 함수에서도 sqrt 를 적용하여 계산했는데, 

사실 모든 약수의 원소를 구할 필요는 없었다.

해당 수의 약수가 짝구인지 홀수인지만 파악 하면 되는 문제였고,

 

해당수의 제곱근이 정확히 정수로 나오면 홀수이고, 정수가 아니라면 짝수가된다,

모쪼록 아쉬운 솔루션이였다.

+ Recent posts