프로그래머스 코딩테스트 레벨1.약수의 개수와 덧셈(JavaScript)

부기·2022년 1월 30일

문제 설명

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

제한사항

1 ≤ left ≤ right ≤ 1,000

내 코드

function solution(left, right) {
  let answer = 0;
  let nums = [];
  for (let i = left; i < right + 1; i++) {
    nums.push(i);
  }
  for (let i = 0; i < nums.length; i++) {
    let sqrt = Math.sqrt(nums[i]);
    if (Number.isInteger(sqrt) === true) {
      answer -= nums[i]
    } else {
      answer += nums[i]
    }
  }
  return answer;
}

풀이과정

  1. 일단 left에서 시작해서 right까지 하나의 배열을 만들고 싶어서 nums이라는 빈 배열에 for문을 통해 값을 left부터 하나씩 증가하여 right까지 값을 넣어 배열을 만들었다.
  2. 그렇게 만든 nums라는 배열을 for문으로 하나씩 돌면서 nums[i]가 제곱근이 정수인 경우는 약수가 홀수가 되기 때문에 nums[i]가 -연산이 이루어 질 수 있도록 했다. 아닌 경우에는 nums[i]가 +연산이 되도록 했다.
  3. 이 과정에서 Math.sqrt()를 이용하여 ()안의 수를 제곱근으로 만들어 주고 간단하게 sqrt변수를 새로 만들어 값을 할당해 주었다.
  4. 제곱근으로 만들었을 때 그 제곱근이 정수인 경우는 우리가 찾는 ex) nums[i] = 16인 경우 약수가 1, 2, 4, 8, 16 이렇게 5개. 즉, 홀수가 나온다. 왜냐 중간에 4가 있기 때문이다. 이것이 우리가 -해줘야하는 경우이다.
  5. 그래서 제곱근이 정수인 경우 해당 nums[i]를 -연산 해줘야하기 때문에 그것을 코드로 구현한 것이 Number.isInteger(sqrt) === true인 경우 nums[i]를 -연산 하는 것이다.
profile
무럭무럭 자라는 중 ∙∙∙🌱🐣

0개의 댓글