백준/코테문제집

[백준] C++ 수들의 합5(2018)

2zreal 2025. 1. 21. 19:57

숫자 N을 연속된 자연수의 합으로 나타낼 수 있는 가지수를 출력하는 문제이다.

예를 들어 숫자 5는 2+3, 5로 나타낼 수 있고 숫자 7은 3+4, 7로 나타낼 수 있다.

 

문제해결방법

1.start와 end를 시작점에 위치시킨다.

2.만약 구간의 합이 N보다 작다면 end를 ++하고 N보다 크다면 start를 ++한다.

3.start가 end보다 커지면 종료한다.

 

sum==N과 같아졌을 때 end를 움직여도 되고 start를 움직여도 된다. 각각 알맞게 코드만 작성해주면 된다.

 

#include <iostream>

using namespace std;

int main(void)
{
	int N = 0;
	cin >> N;

	int start = 1;
	int end = 1;

	int count = 0;
	int sum = 1;
	while (start<=end)
	{
		if (sum < N)
		{
			end++;
			sum += end;
		}
		else if (sum > N)
		{
			sum -= start;
			start++;
		}
		else if (sum == N)
		{
			count++;
			sum -= start;
			start++;
		}
	}
	
	cout << count;

	return 0;
}