Symbol
[프로그래머스] LV 1. 약수의 합 - Javascript
프로그래머스 LV 1. 약수의 합 - Javascript 문제 풀이 입니다.
2024-03-27

📌문제

문제 설명

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한사항

  • n은 0 이상 3000이하인 정수입니다.

입출력 예

nreturn
1228
56

📌My Solution


약수의 합을 구하거나 개수를 구하는 문제가 나왔을 땐 제곱근을 구하는 함수 Math.sqrt 를 사용해야 루프가 적게 돈다.
정수 n 이 100이라고 가정하고 풀이해보면 100의 제곱근 10까지의 루프를 돌면 나오는 100의 약수는 [1, 2, 4, 5, 10] 이렇게 5개 이다.
이렇게 나온 약수로 다시 100을 나누면 [100, 50, 25, 20, 10] 이 나오는데 이또한 100의 약수들이다.
이 법칙을 사용하여 루프를 제곱근까지만 돌면서 100에 대한 모든 약수를 구하고 indexOf 메소드로 중복 예외처리를 해주었다.
마지막으로 reduce 메소드를 사용하여 구한 약수들의 합계를 return하여 문제를 해결했다.
reduce 의 초기값 0은 divisors 가 빈배열일 때(정수 n 이 0일 때)를 고려하여 추가했다.

📌Best Solution


정답을 보니 정수 n의 최대값이 크지 않고 합계만 구하면 되므로 굳이 약수를 배열로 만들필요가 없었다..
제곱근을 사용한 방식은 PS문제에서만 사용하면 될 것 같다.