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 이하의 자연수 입니다.
입출력 예
n | result |
---|---|
15 | 4 |
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)
2 | 3 | 4 | |
---|---|---|---|
0 | 1 | 2 | |
+ | 기본값 | 기본값 | 기본값 |
예) 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;
}