자연수 N이 주어졌을 때, N을 연속된 자연수들의 합으로 표현하는 방법의 수를 구하는 문제이다.
예를 들어
15
= 15
= 7 + 8
= 4 + 5+ 6
= 1 + 2 + 3+ 4+ 5
로 표현할 수 있으므로 답은 4이다.
먼저 1부터 다 더해본다. 시작점을 1로 잡아보자는 것이다. loop를 돌면서 1+2+3+… 처럼 하나씩 더해보면 합이 N이 되거나 N보다 커지는 순간이 발생한다. 만약 N이 되면 cnt를 증가시키고 loop을 빠져나오면 되고, N보다 큰 경우에는 답이 될 수 없으므로 loop를 탈출하면 된다.
그 다음에는 2부터 다 더해본다. 위와 동일한 방법으로 하나씩 더해보면서 2를 포함하는 답이 있는지를 체크한다.
이 방법으로 시작점을 N까지 하나씩 늘리면서 모든 경우의 수를 다 체크해보면 최종 정답을 구할 수 있다.
#include <iostream>
using namespace std;
int solution(int n) {
int answer = 0;
int i; // start point
for(i = 1; i <= n; i++) {
int j = 0;
int sum = 0;
while(sum <= n) {
sum += (i + j);
if(sum == n) {
answer++;
break;
}
else if(sum > n) break;
j++;
}
}
return answer;
}