알고리즘
[Algorithm] 약수의 합
TrueSik
2022. 9. 23. 00:07
문제
정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.
예제
입출력 예 #1
12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다.
입출력 예 #2
5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다.
풀이
function solution(n) {
let sum = 0;
for (let i = 1; i <= n; i++) {
if (n % i === 0) {
sum += i
}
}
return sum
}
다른 풀이
// 1 번
function solution(n, a=0, b=0) {
return n<=a/2?b:solution(n,a+1,b+=n%a?0:a);
}
// 2 번
function solution(n) {
return n==0?0:Array(n).fill(1).map((x,y)=>x+y).filter(a=>n%a!=0?0:a).reduce((c,d)=>c+d)
}
// 3 번
function solution(n) {
var answer = 0;
let i;
for (i = 1; i <= Math.sqrt(n); i++){
if (!(n%i)) {
answer += (i+n/i);
}
}
i--;
return (i === n/i) ? answer-i : answer;
}
3번 풀이 방식은 계산량을 줄이기 위해 n까지 다 안 하고, 아래 짝을 찾으면 위아래를 같이 더한다고 합니다.
예를 들어 12면, 3을 찾았을 때 3+4를 해주는 방법입니다.
출처
https://school.programmers.co.kr/learn/courses/30/lessons/12928
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr