function solution(n) {
let count = 0;
outer:for(let i = 1; i <= n; i++){
let sum = 0;
for(let j = i; j <= n; j++){
sum += j;
if(sum > n){
continue outer;
}
if(sum === n){
count += 1;
}
}
}
return count;
}
반드시 연속적인 자연수의 합만으로 n
을 만드는 것이 허용되므로, for
문을 사용했다.
i
를 통해 시작하는 자연수를 지정해준다.
i
부터 n
까지 증가하는 j
를 누적합하면서
n
보다 커져버리는 경우 i
를 증가시켜서 시작 자연수를 변경한다.
누적합이 n
과 일치하면 정답이므로 count
를 증가시킨다.
다른 분들이 풀이를 봤는데, 수학적으로 접근하신 분이 계셨다.
다만...아무리도 봐도 필자가 이해를 못해서 여기서 설명을 할 수는 없을 것 같다.
대신, 구글링을 통해 얻은 다른 분의 풀이를 첨부하겠다.
이 분은 C++로 하신 것 같은데, 같은 문제이기도 하고, 설명을 잘해놓으셔서 참고하면 좋을 것 같다.
이 분의 논리가 아무래도 이해 못했던 다른 분의 풀이인 것 같다.