Lv.2 - 숫자의 표현

scroll0908·2023년 1월 29일

문제 설명

Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 수 있습니다.

1 + 2 + 3 + 4 + 5 = 15
4 + 5 + 6 = 15
7 + 8 = 15
15 = 15
자연수 n이 매개변수로 주어질 때, 연속된 자연수들로 n을 표현하는 방법의 수를 return하는 solution를 완성해주세요.

제한사항
n은 10,000 이하의 자연수 입니다.

입출력 예

nresult
154

나의 코드

function solution(n) {
    let i = 0;
    let count = 0
    while( n > 0 ){
        n -= i
        if( n > 0 && n % (i+1) === 0 ) count++ 
        i++
    }
    return count
}

풀이

1씩 증가하는 연속된 숫자는 다음의 규칙을 가지고 있다

예) 9 = 2+3+4 = (2+0)+(2+1)+(2+2)

234
012
+기본값기본값기본값

예) n = 15

n=15, n -= i
i=0, 15-0 = 15, n > 0 && 15%1 === 0 ? ⭕️ -> 15
i=1, 15-0-1 👉 15-1 = 14, n > 0 && 14%2 === 0 ? ⭕️ -> 7,8
i=2, 15-0-1-2 👉 14-2 = 12, n > 0 && 12%3 === 0 ? ⭕️ -> 4,5,6 
i=3, 15-0-1-2-3 👉 12-3 = 9, n > 0 && 9%4 === 0 ? ❌ 
i=4, 15-0-1-2-3-4 👉 9-4 = 5, n > 0 && 5%5 === 0 ? ⭕️ -> 1,2,3,4,5  
i=5, 15-0-1-2-3-4-5 👉 5-5 = 0, n > 0 && 0%6 === 0 ? ❌

회차가 반복될수록 n-i가 반복되므로 n=n-i로 재할당해서 반복을 줄인다.

다른 풀이

n -= i, i++ 👉 이 2개의 순서를 바꿨더니
if조건문에 n > 0이 없어도 가능하다

function solution(n) {
    var answer = 0;
    let  i = 0;
    while(n > 0){
       i++;
       if(n % i  === 0)  answer++;
       n -= i;
    }
    return answer;
}
profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글