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 |
반응형