[Javascript] 프로그래머스 Level1 _ 약수의 합
👇🏻
👇🏻
시행착오
( + 코드를 작성하면서든 생각들.)
1.
for반복문으로 i를 증가시키며 나머지가 0이되는 약수를 찾아 모두를 합했다.
가장 정확한 방법으로 테스트에 통과할 수 있다!
하지만 n은 3000 이하인 정수이기 때문에 for문에서만 최대 3000번을 돌게 될 것이다! ㅠㅠ
function solution(n) {
var sum = 0;
for(let i=1; i<=n; i++){
//약수(나누었을 때 나머지가 0이 되는 수) 체크
if(n%i === 0){
sum+=i;
}
}
return sum;
}
2.
[ 3개 이상의 소수로 구성된 합성수는 그 수의 제곱근보다 작거나 같은 약수를 갖는다. ]
라는 정리를 참고하면 반복 횟수를 줄일 수 있다!
12의 제곱근은 3.4641....이 나오는데 결론적으로 12의 경우 3번만 반복하면
3000일 경우에도 반복문을 54번만 돌리면 약수들을 모두 구할 수 있다ㅎㅎㅎ
근데 이대로만 제출하면 정확도가 82.4점이 나온다.
약수가 n의 제곱근과 같다면 두 번 더해지기 때문에 확인해주는 코드를 추가로 작성해줘야 한다.
function solution(n) {
var divisor = Math.sqrt(n);
var sum = 0;
for(let i=1; i<=divisor; i++){
if(n%i === 0){
sum += i + (n/i);
}
}
return sum;
}
이렇게 수정하면 정확성 테스트를 통과할 수 있다.
function solution(n) {
var divisor = Math.sqrt(n);
var sum = 0;
for(let i=1; i<=divisor; i++){
if(n%i === 0){
sum += i;
//제곱근과 i 일치여부 확인
//if(n/i != i)
if(i != divisor)
sum += n/i;
}
}
return sum;
}
⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️
*** 혹시라도 잘못된 정보가 있다면 언제든지 알려주시면 감사하겠습니다 ! ***
'Programmers > Level 1' 카테고리의 다른 글
[Javascript] 프로그래머스 : 나누어 떨어지는 숫자 배열 (2) | 2021.07.15 |
---|---|
[Javascript] 프로그래머스 : 이상한 문자 만들기 (0) | 2021.07.15 |
[Javascript] 프로그래머스 : 같은 숫자는 싫어 (0) | 2021.07.07 |
[Javascript] 프로그래머스 : 서울에서 김서방 찾기 (0) | 2021.07.06 |
[Javascript] 프로그래머스 : 가운데 글자 가져오기 (0) | 2021.07.06 |