본문 바로가기

항해99_10기/[2주차] 알고리즘 문제풀이

[26번][중급] 약수의 합

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

나의 답

약수의 합 => 숫자의 약수는 1~제곱근까지의 정수와 그 배수로 이뤄져 있음을 이용.
[pseudo code] 
1. 입력받은 정수의 제곱근을 변수로 선언
2. 1 ~ 제곱근까지 돌면서 정수 % i 값이 0(정수의 factor)이고, i 제곱근 값이 아니라면(예를 들어 4의 경우, 제곱근 값이 2이므로, 2 % 2는 의미 없음) i와 n/i 값을 모두 answer에 더해주고, 만약 i = 제곱근 값이라면 i만 더해줌

 

function solution(n) {
  let answer = 0;
  let sqrt = Math.sqrt(n);
  for (let i = 1; i <= sqrt; i++) {
    if (n % i === 0 && i !== sqrt) {
      answer += i + n / i;
    } else if (i === sqrt) {
      answer += i;
    }
  }
  return answer;
}


//간단버전
function solution(n) {
  let answer = 0;
  for (let i = 1; i <= n; i++) {
    if (n % i === 0) {
      answer += i;
    }
  }
  return answer;
}