약수 구하기
in Algorithm
프로그래머스 ‘약수구하기’ 문제.
약수를 구하기 위해서는 잘 생각해보면 주어진 숫자 n을 어떤 수 x로 나누었을때 0이 되어야 한다는 뜻이다.
이때 x가 n의 약수가 된다.
그래서 약수를 구하는 기본 for문을 생각해보면
for(let i = 1; i <= n; i++) {
if(n % i === 0) {
console.log(i)
}
}
이런 개념이다. n까지 돌되, 1부터 시작한 i가 매번 n을 나눴을때 나머지가 0이라면
똑떨어지는 숫자로 그 수는 n의 약수가 된다.
그렇게 짠 코드
function solution(n) {
let answer = 0;
for (let i = 0; i <= n; i++) {
if( n % i === 0) { answer += i}
}
return answer
}
약수일때마다 answer에 i 누적시키디
reduce 사용
reduce를 정리했는데도 도대체 이걸 어떻게 쓰라는건지 모르겠다……
리듀스 개념 정리 다시 해야할듯…
여튼 이 약수문제 reduce로도 풀 수 있는데,
//reduce사용
function solution(n){
const answer = new Array(n).fill(1).reduce((cu, el, i)=>{
const num = el + i;
return cu + (n%num === 0 ? num : 0)
console.log(cu, el, i);
console.log(num);
},0);
return answer;
}
우선 빈 배열을 하나 만들어준다. new Array(n)
그리고 숫자 1로 그 배열을 가득 채워준다. fill(1)
그리고 그 배열을 reduce함수를 쓰면서 cu, el, i를 인자로 받는다