연속하는 숫자를 더해서 주어진 숫자를 얼만큼이나 만들 수 있는지 묻는 문제이다.
2로 나눠서(홀수는 n+1) 1부터 계속 더해주다가 값이 같으면 answer을 더해주고 주어진 값보다 크면 1부터 빼줘서 값을 맞춰주면 된다. 문제의 포인트를 생각할 수 없어서 인터넷을 찾아서 풀었다. 비슷한 문제를 푼 거 같은데 왜 기억이 나지 않는 걸까. 단순히 내 착각일까.
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int x = (n%2==0) ? n/2 : (n+1)/2;
int sum = 0;
int m = 1;
int answer = 1;
for(int i=1; i<=x; i++){
sum = sum + i;
if(sum>=n){
while(sum > n){
sum = sum - m++;
}
if(sum == n){
answer++;
}
}
}
return answer;
}