[Javascript] 프로그래머스 LV1 약수의 개수와 덧셈

문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ left ≤ right ≤ 1,000

입출력 예

leftrightresult
131743
242752

입출력 예 설명

입출력 예 #1

다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

약수약수의 개수
131,132
141 ,2,7,144
151,3,5,154
161,2,4,8,165
171,172

따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

약수약수의 개수
241,2,3,4,6,8,12,248
251,5,253
261,2,13,264
271,3,9,274

따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

문제 풀이

입력받은 수가 완전제곱수(어떤 자연수를 제곱하여 만들어 지는 수)인 경우 약수의 개수는 홀수가 된다. 따라서 반복문을 사용하여 left부터 right까지의 수를 i로 입력 받고 숫자의 제곱근을 반환받는 Math.sqrt(i)를 사용하여 i의 제곱근을 구한뒤 제곱근이 정수(자연수)인지 조건문을 통해 확인하고 정수이면 완전제곱수이므로 약수의 개수가 홀수이기 때문에 result에서 -i를 해준다. i의 제곱근이 정수가 아닐 경우 완전제곱수가 아니므로 약수의 개수는 짝수, 따라서 result에 +i를 해준다.

function solution(left, right) {
      let result = 0;
  for (let i = left; i <= right; i++) {
    if (Math.sqrt(i) % 1 === 0) { // Number.isInteger(Math.sqrt(i)를 통해서도 정수 판별이 가능
      result = result - i;
    } else {
      result = result + i;
    }
  }
  return result;
}

https://programmers.co.kr/learn/courses/30/lessons/77884
위 URL을 클릭하시면 해당 문제로 연결됩니다.

좋은 웹페이지 즐겨찾기