https://school.programmers.co.kr/learn/courses/30/lessons/12928
나의 풀이
1)
function solution(n) {
let result =[];
if(!n) return 0;
((n) => {
for(i=1; i<=n; i++){
if(n % i === 0) result.push(i);
}
})(n)
return result.reduce((acc,cur) => acc += cur );
}
왜 굳이 함수를 만들었을까 ????
2)
function solution(n) {
let result = 0;
for(i=1; i<=n; i++) if(n % i === 0) result += i;
return result;
}
왜 계속 배열로 해서 할려고하지 더 쉬운방법이 있는데 조금 더 생각하고 풀어보자
너무 배열쪽으로만 생각하지 말자
다른 사람 풀이
이건 정말 괜찮은 풀이 같다.
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;
}
이 풀이 법은 모든 것을 계산하지 않고 약수하나를 찾으면 짝을 찾는 것이다.
만약 n = 12이면
약수가 1, 2, 3, 4, 6 ,12 이다.
i = 1 ;
1+12 / 1 = 13
i = 2;
2+12/2 = 8
i = 3;
3 + 12/3 = 7 이다.
return (i === n/i) ? answer-i : answer;
마지막에 이 조건은 n= 9 같은 경우가 있기 때문이다.
9의 약수는 1, 3, 9 이다.
그런데 우리가 쓴 코드는 짝궁을 찾기 때문에 1, 9가 짝궁이되고 3,3이 중복으로 짝궁이 되어서
3을 제거 해주는 작업이 마지막 저 코드이다.
이 풀이를 분석하면서 내가 for문에 대해서 완벽하게 아는게 아니였다는 걸 알게 되었다.
그래서 for문에 대해서 다시 정리했다.
https://html-jc.tistory.com/367
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 자연수 뒤집어 배열로 만들기 (0) | 2022.08.04 |
---|---|
[프로그래머스-JS] level.1 자릿수 더하기 (0) | 2022.08.03 |
[프로그래머스-JS] level.1 문자열을 정수로 바꾸기 (0) | 2022.08.02 |
[프로그래머스-JS] level.1 수박수박수박수박수박수? (0) | 2022.08.02 |
[프로그래머스-JS] level.1 소수찾기 <에라토스테네스의 체>, <Array.from()>, <Array.prototype.fill()> (0) | 2022.08.02 |