알고리즘/문제를 풀어보쟈

약수를 더해보자!

섕걍 2022. 3. 17. 22:50

문제해결

function solution(n) {
    let answer = 0;
    let answerArray = [];
    for (let i = 1; i <= n ; i++){
        if(n%i === 0){
           answerArray.push(i);
        }
    }
    answer = answerArray.reduce((a,b)=>a+b);
    return answer;
}

// 약수는 나눠지는 모든숫자. (기억 잘 안남 틀리면 고쳐주세여ㅠ)
// 따라서 자기자신까지 for문을 돌려서 나눠서 나머지가 0이 되는 숫자들을 구함.
// 배열안에 나머지가 0이 되는 숫자들을 push하고
// reduce를 이용해 더해준뒤 answer로 리턴해줌.

테스트 1 〉	통과 (0.05ms, 30.1MB)
테스트 2 〉	통과 (0.06ms, 29.9MB)
테스트 3 〉	통과 (0.09ms, 30.1MB)
테스트 4 〉	통과 (0.07ms, 30.1MB)
테스트 5 〉	통과 (0.10ms, 29.8MB)
테스트 6 〉	통과 (0.09ms, 29.6MB)
테스트 7 〉	통과 (0.12ms, 29.9MB)
테스트 8 〉	통과 (0.09ms, 30.1MB)
테스트 9 〉	통과 (0.14ms, 29.9MB)
테스트 10 〉	통과 (0.13ms, 29.9MB)
테스트 11 〉	통과 (0.10ms, 29.9MB)
테스트 12 〉	통과 (0.12ms, 30MB)
테스트 13 〉	통과 (0.07ms, 30.2MB)
테스트 14 〉	통과 (0.17ms, 29.7MB)
테스트 15 〉	통과 (0.18ms, 29.9MB)
테스트 16 〉	실패 (런타임 에러)
테스트 17 〉	통과 (0.19ms, 30MB)
// 런타임에러가 떴당!!
// for문을 줄여야 할까 고민하다가 모르겠어서 검색했는데
// 이렇게 바로 더하면 되는것이어따...!!


function solution(n) {
    let answer = 0;
    for (let i = 0; i<=n ; i++){
        if(n%i === 0){
          answer += i;
        }
    }
    return answer;
}

개선점

function solution(n) {
    let answer = 0;
    const answerArray = [];
    for (let i = 1; i <= n ; i++){
        if(n%i === 0){
           answerArray.push(i);
        }
    }
    answer = answerArray.reduce((a,b)=>a+b,0);
    return answer;
}

reduce에 초기값을 줘야한다!

초기값 0을 주니까 런타임 에러가 발생하지 않았다.

for와 reduce를 두개를 써서 쓴 에러가 아니었단 말..!!

코딩보다 알고리즘이 더 재밌어-!푸핫

 

reduce 정리한거 여기

https://diary-of-lemon.tistory.com/164?category=1044303