Problem Solving/프로그래머스

[프로그래머스/JavaScript] 약수의 합

세고래 2022. 10. 6. 05:25

https://school.programmers.co.kr/learn/courses/30/lessons/12928?language=javascript 

 

프로그래머스

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

programmers.co.kr


1) 풀이

원래 난이도가 낮은 문제는 따로 풀이를 적지 않는 편이지만

약수 구하는 문제는 꽤 나오고 또 이번에 헤맸던 부분이 있어서 기록해보려고 한다~

 

아래에 적힌 코드는 최종 소스코드인데, 원래는 for 문에 조건이 i*i < n 이었고, answer+=i+n/i 라는 식으로 

i로 나눠준 뒤 그 i 의 몫과 다같이 더해주는 식으로 했는데

특정 테케 몇개에서 통과가 되지 않았다!

 

그래서 질문을 뒤져보니, 16과 같은, 제곱근처럼 같은 숫자를 곱해 만들어지는 숫자가 있다는 사실을 깨달았다!

그치만 해당 문제는 약수 더하기.. 16도 4를 두개 곱하는 거지만, 약수에서는 1, 2, 4, 8, 16 이렇게 4가 한 번 카운팅 되어야 한다! 그래서 아래의 최종 소스코드로 변경..

 

이거 꼭 꼭 기억하자!!

2) 최종 소스코드
function solution(n) {
  let answer = 0;
  for (let i = 1; i * i <= n; i++) {
    if (n % i === 0) {
      answer += i;
      if (i !== n / i) answer += n / i;
    }
  }
  return answer;
}

 

728x90