https://school.programmers.co.kr/learn/courses/30/lessons/12924
1개부터 시작해서 ++ 해가면서 해당 개수의 연속되는 자연수의 합이 n이 될 수 있는지 체크해간다.
반복문으로 1부터 시작해서 1 부터 i까지 의 합 sum이 n을 넘어가기 전 까지 반복하면서 n에서 sum을 뺀 값을 i 로 나누었을 때 나머지가 없으면 n이 i개의 연속되는 자연수의 합으로 구해진다는 뜻이므로 answer을 ++한다.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
for(int i = 1, sum = 1; sum <= n; i++, sum = (i*(i+1)) / 2)
{
if(((n - sum) % i) == 0)
answer++;
}
return answer;
}
using namespace std;
int solution(int n) {
int answer = 0, tmp = 0;
for(int i = 1; i <= n; i++){
tmp = i;
for(int j = i + 1; j <= n; j++){
if(tmp == n) {answer++; break;}
if(tmp + j > n) break;
tmp += j;
}
}
return answer + 1;
}
i 부터 i+1 i+2 ...를 더해가면서 즉 연속해서 더해가면서 n이 완성되면 answer++하고 break, n을 넘어버리면 없던거로 한다.