문제

boj12924

자연수 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;
}