알고리즘/BOJ

백준 2018번 수들의 합 5

꾸준함. 2019. 1. 29. 03:49

문제 링크입니다: 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