본문 바로가기

JS 코테

<Javascript-CT> LV1. 진입...!! 1. 약수의 합

정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.

제한 사항
n은 0 이상 3000이하인 정수입니다.

 

 

내 풀이

첫번째 시도

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

 

이렇게 풀었는데 테스트 케이스 하나에서 런타임 에러가 났다

엥....?? 싶었는데

 

문제 조건을 보니 0<= n <= 3000 이었다.

n이 0인 케이스가 있을 수 있다는 것....

이럴때는 reduce에 초기값을 넣어줘야 한다

 

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

 

 

🕹️ 문제를 풀기위해 알면 좋을 것 

- array.reduce

const array1 = [1,2,3,4]
const initialValue = 0;
const sumWithInitial = array1.reduce( (accumulator, currentValue) => accumulator + currentValue, initialValue)
// 0 + array1의 각 요소

 

728x90