본문 바로가기
코딩 테스트 연습/프로그래머스 level 1

[프로그래머스] lv1. 약수의 합

by 카누가 좋아요 2023. 4. 25.

 

❓ 문제

 

 

💡 해결하기

기본적인 방법으로는 1 이상 n 이하의 범위의 자연수로 n을 하나씩 나누어 봐서 나머지가 0이 나오게 하는 수가 약수가 되므로 이들을 더한 값을 반환하면 된다.

 

그런데 약수에 자기 자신이 포함되는 것은 모든 자연수에 해당한다.

따라서 범위를 1에서 n을 2로 나눈 몫까지로 정하고, 마지막에 자기 자신을 따로 더해주면 불필요한 연산이 줄어들어 효율성이 높아진다.

 

📌 Python

 

def solution(n):
    return sum([d for d in range(1, n // 2 + 1) if n % d == 0]) + n

 

📌 Javascript

JS의 경우, 위와 같은 원리로 범위를 divisor <= Math.floor(n / 2)로 잡고 가는 것보다 아래처럼 처음부터 끝까지 하나씩 나누어 보는 것이 더 시간이 단축되는 것을 확인할 수 있었다.

 

function solution(num) {
  let sum = 0;
  for (let i = 1; i <= num; i++) {
    if (num % i === 0) sum += i;
  }
  return sum;
}

 

댓글