약수 구하기




프로그래머스 ‘약수구하기’ 문제.

약수를 구하기 위해서는 잘 생각해보면 주어진 숫자 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를 인자로 받는다








© 2018. by sora

Powered by sora