문제 링크입니다: https://www.acmicpc.net/problem/2018
투 포인터 알고리즘을 적용해도 되고 등차수열 합을 이용해서 풀어도 되는 문제였습니다.
저 같은 경우에는 등차수열 합을 이용해서 풀었습니다.
$$x_1 + x_2 + x_3 + ... + x_k = (a+1) + (a+2) +(a+3) + ... + (a+k)=k*a + (k * (k+1))/2$$
$$k*a+(k*(k+1))/2가\; N이\; 되기\; 위해서는\; k*a=N-(k*(k+1))/2이여야\;합니다.$$
$$따라서,\;N-(k*(k+1))/2가\;k로 나누어\;떨어진다면\;해당\;수열의\;합은\;N입니다.$$
#include <iostream>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
int result = 0;
int num = 1;
while (1)
{
long long temp = 1LL * (num*(num + 1) / 2);
if (temp > N)
break;
if ((N - temp) % num == 0)
result++;
num++;
}
cout << result << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 16563번 어려운 소인수분해 (0) | 2019.01.30 |
---|---|
백준 9020번 골드바흐의 추측 (0) | 2019.01.30 |
백준 14614번 Calculate! (0) | 2019.01.29 |
백준 2143번 두 배열의 합 (0) | 2019.01.27 |
백준 2632번 피자 판매 (6) | 2019.01.27 |