본문 바로가기

알고리즘/BOJ

1024번

1024번 - 수열의 합


연속된 수이기 때문에 , 맨 처음 값이 k 라고 생각하면 그 다음은 k+1, k+2, .. 이런식으로 된다.


따라서  k , k+1 , k+2, ... 이런식으로 l 길이 이상을 찾아주면 된다.


예제로 예를 들면 n=18, l=2 이기 때문에 


맨 처음에는 k , k+1 을 가지고 구해본다. 이게 길이가 2이므로.. 그러면 2k+1=18 이 되어야 하므로 k는 딱 나누어 떨어지지 않아서 구할 수 


없다. (정수값을 구해야 하는게 문제의 조건이므로)


그래서 그 다음에는 구한 2k+1 에 그 다음 값 k+2 를 더하면 3k+3 이 되고 , 3k+3=18 이 되어야 한다.


딱 k의 값이 정수로 나오기 때문에 k, k+1, k+2 가 정답이 된다.


처음에 n-sum>=0 체크를 하지 않았다, 음수의 나머지를 구하는 값에서도 0 이 나올 수 있다는 점을 잊지 말것 !


<정답 코드>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>
 
using namespace std;
 
int main()
{
    int n, l;
    cin >> n >> l;
 
    int sum = 0;
 
    for (int i = 0; i <= 99; i++)
    {
        sum += i;
 
        if (i >= l - 1 && n - sum >= 0)
        {
            if ((n - sum) % (i + 1== 0)
            {
                for (int k = 0; k <= i; k++)
                {
                    cout << (n - sum) / (i + 1+ k << " ";
                }
 
                return 0;
            }
        }
 
    }
 
    cout << "-1";
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

1072번  (0) 2018.03.20
10219번  (0) 2018.03.19
7569번  (0) 2018.03.18
10216번  (0) 2018.03.18
2839번  (2) 2018.03.16