[Lv.1]약수의 합(☆☆☆)

Jihyun-Jeon·2022년 5월 2일
0

https://programmers.co.kr/learn/courses/30/lessons/12928
체감 난이도 : ☆☆☆

🔶 내가 한 방법

function solution(num) {
  const arr = new Set(); // 자동으로 중복값 제거됨
  const x = Math.floor(Math.sqrt(num)); // 1.제곱근을 구함. 소수점은 버림

  // 2. 제곱근~1의 숫자로 해당 숫자를 나눠봄.
  // 나머지가 0이 나오면 약수인 것임. 약수이면 arr에 담음.
  for (let i = x; i >= 1; i -= 1) {
    if (num % i === 0) {
      arr.add(i);
      arr.add(num / i);
    }
  }

  // 3.arr에 있는 모든 수를 합해서 반환함
  return [...arr].reduce((acc, cur) => acc + cur, 0);
}

// 실행코드
console.log(solution(12)); // 28 (1, 2, 3, 4, 6, 12) // 제곱근 :3
console.log(solution(10)); // 18 (1, 2 , 5, 10) // 제곱근 : 3
console.log(solution(5)); // 6 (1, 5) // 제곱근 : 2
console.log(solution(13)); // 14 (1,2,7,14) 
console.log(solution(1)); //  1 (1) ←두 약수가 같은 경우 주의!(1,1)
console.log(solution(2)); //  3 (1,2)
console.log(solution(0)); //  0 (0)
console.log(solution(4)); // 7  (1,2,4)  ←두 약수가 같은 경우 주의! (2,2)

🔶 다른 사람 방법

  • 방법1
    : 제곱근을 구해 약수를 구함. 이후 for문을 돌면서 바로 약수값을 더해나감
function solution(num) {
  let result = 0;
  const sqrt = Math.floor(Math.sqrt(num));

  for (let i = 1; i <= sqrt; i += 1) {
    if (!(num % i)) {
      num / i === i ? (result += i) : (result += i + num / i); 
      // 두 약수가 같으면 하나만 더함.
    }
  }
  return result;
}
  • 방법2 : 직접 1부터 해당 숫자까지 나눠보면서 약수 찾는 법
    (엄청난 for문을 돌아야되서 비추)
function solution(num) {
  let sum = 0;
  for (let i = 1; i <= num; i += 1) {
    if (num % i === 0) {
      sum += i;
    }
  }
  return sum;
}

🔶 피드백

  • !10 이 차제가 false임
  • !(10/2)를 해야 !0이 되어 true가 나오는 것임
// 1.
if (!10 % 2) {
  console.log('0');
} else {
  console.log('no'); // no
}

// 2.
if (!(10 % 2)) {
  console.log('0'); // 0
} else {
  console.log('no');
}

0개의 댓글