Lv.2 - 숫자의 표현

송철진·2023년 1월 29일
0

문제 설명

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개의 댓글