약수의 개수와 덧셈

GY·2021년 9월 8일
0

알고리즘 문제 풀이

목록 보기
15/92
post-thumbnail
function solution(left, right) {//left = 13, right = 17이라고 가정하면
  let count = 0;
  let evenArr = [];
  let oddArr = [];
  for(j = left; j <= right; j++){//13~17까지 한번씩 거쳐가면서
      count = 0;
    for(i = 0; i <= right; i++){
      if(j % i === 0) {//1~17까지 나뉘어서 0이 되는 수, 즉 약수가 있는지 확인한다.
        count++;//있다면 그 수를 센다.(각 수의 약수의 갯수)
      }
    }
    if(count % 2 === 0) {//약수의 갯수가 짝수라면
      evenArr.push(j);//짝수 배열에 넣는다.
    } else {
      oddArr.push(j);//홀수도 마찬가지
    }
  }
  let evenSum = evenArr.reduce(//약수의 갯수가 짝수인 수와 홀수인 수를 각각 더한다.
    (accum, curr)=>{
    return accum+curr;
  },0)
  let oddSum = oddArr.reduce(
    (accum, curr)=>{
    return accum+curr;
  },0)
  let answer = evenSum - oddSum;//약수의 갯수가 짝수인 수의 합계에서 홀수인 수의 합계를 뺀다.
  return answer;
 }

다만...너무 코드가 길고 지저분하다는 느낌이 든다.
다른 분들의 풀이를 공부해보자.

function solution(left, right) {
  var answer = 0;
  for (let i = left; i <= right; i++) {//left부터right 까지
      if (Number.isInteger(Math.sqrt(i))) {//각 수의 제곱근이 정수라면 약수의 갯수가 홀수이므로
          answer -= i;//그 수를 뺀다.
      } else {//아니라면 짝수이므로
          answer += i;//그 수를 더한다.
      }
  }
  return answer;
}

Review

그 수의 제곱근이 정수라면 약수의 갯수가 홀수이다.

예) 36의 제곱근은 6으로 정수, 36의 약수의 갯수는 
1,2,3,4,6,9,12,18,36 9개로 홀수이다. 
제곱근이 되는 수는 짝을 이루지 않기 때문이다 (6)
  • Math.sqrt(x) : x의 제곱근
  • Number.isInteger() : 주어진 값이 정수인지 판별
profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.

0개의 댓글