※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 1024번 문제인 수열의 합이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/1024 

 

1024번: 수열의 합

첫째 줄에 N과 L이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이고, L은 2보다 크거나 같고, 100보다 작거나 같은 자연수이다.

www.acmicpc.net

주어진 수 N을 L 이상 100 이하개의 연속한 정수의 합으로 나타내는 문제이다.

 

먼저, 어떤 수를 K개의 연속한 수의 합으로 나타내는 방법은 최대 한 개 존재한다는 점을 확인하자.

 

만약 K가 홀수라면 K개의 정수의 가운데 숫자는 N/K가 되어야 하고, 짝수라면 K개 정수의 가운데 두 수의 합은 (N/(K/2))이 되어야한다는 점을 확인한다면 이 문제를 간단히 해결할 수 있게 된다.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int N, L; cin >> N >> L;
	for (int k = L; k <= 100; k++) {
		if (k & 1) {
			if (N % k == 0) {
				int l = N / k - (k / 2), r = N / k + (k / 2);
				if (l < 0) continue;
				for (int i = l; i <= r; i++) cout << i << ' ';
				return 0;
			}
		}
		else {
			if (N % (k / 2) == 0 && (N / (k / 2)) & 1) {
				int l = (N / (k / 2)) / 2 - (k / 2) + 1, r = (N / (k / 2)) / 2 + (k / 2);
				if (l < 0) continue;
				for (int i = l; i <= r; i++) cout << i << ' ';
				return 0;
			}
		}
	}

	cout << -1;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 1188 // C++] 음식 평론가  (0) 2021.11.12
[BOJ 10158 // C++] 개미  (0) 2021.11.11
[BOJ 9934 // C++] 완전 이진 트리  (0) 2021.11.09
[BOJ 13172 // C++] Σ  (0) 2021.11.08
[BOJ 6150 // C++] Summing Sums  (0) 2021.11.07

+ Recent posts