프로그래머스 Lv1. 약수의 합 JS

FE 개발자 신상오·2022년 6월 4일
0

프로그래머스

목록 보기
8/20
post-thumbnail

문제


풀이

function solution(n) {

    let result = 0;

    for (let i = 1; i <= n; i++){
        if(n % i === 0){
            result += i
        }
    }

    return result;
}

다른 풀이(최적화된 풀이)

function solution(n) {

    let   result = 0;
    const sqrtOfN = Math.sqrt(n);
  
    for (let i = 1; i <= sqrtOfN; i++) {
      if (n % i === 0) {
        result += i;
        // 1) 제곱근의 값이 중복으로 들어가는 것을 방지하는 조건문
        if (n / i !== i) {
          result += n / i;
        }
      }
    }
    return result;
  }
  

해설

첫 번째 풀이

1부터 n까지 범위내의 모든 수로 n을 나눠보면서 0으로 나누어 떨어지는 수를 찾습니다
n의 약수를 구할 경우에는 반복문을 n번 반복합니다.

  for (let i = 1; i <= n; i++){
        if(n % i === 0){
            result += i
        }
    }

두 번째 풀이

n의 제곱근의 약수를 구하면 n의 약수를 구할 수 있는 원리를 이용한 풀이입니다
100의 약수를 확인해보면
[1, 2, 4, 5, 10, 20, 25, 50, 100]으로 100의 제곱근인 10을 기준으로 대칭을 확인할 수 있습니다.

  • 1 x 100 = 100
  • 2 x 50 = 100
  • 4 x 25 = 100
  • 5 x 20 = 100
	const arr = [];
	let   sqrtofN = Math.sqrt(n);
    for (let i = 1; i <= sqrtOfN; i++) {
      if (n % i === 0) {
        arr.push(i); // [1, 2, 4, 5, 10]
        // 1) 제곱근 10의 값이 중복으로 들어가는 것을 방지하는 조건문
        if (n / i !== i) {
          arr.push(n / i); // [20, 25, 50, 100]
        }
      }
    }

위 코드를 통해 [1, 2, 4, 5, 10, 20, 25, 50, 100] 100의 약수가 담긴 배열을 얻을 수 있습니다.

profile
주간 회고용 블로그입니다 (개발일지와 정보글은 티스토리에 작성합니다.)

0개의 댓글