본문 바로가기

알고리즘 문제

[C/C++ 백준 1024번] 수열의 합 (Silver 4)

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

 

1024번: 수열의 합

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

www.acmicpc.net

초항을 i라 하고 합 N, 길이 L이라고 하면, i를 N와 L의 수식으로 표현할 수 있다. 

문제의 핵심은 L값을 증가시키면서 초항 i가 0이상인 정수일 경우를 찾는 것이다. 아닐 경우는 그냥 -1을 출력하면 된다.

계산하면 i=N/L-(L-1)/2이므로, 이를 바탕으로 조건문을 잘 설정해주자.

 

코드는 다음과 같다.

 

#include <cstdio>
int main(void){
	int N, L;
	scanf("%d %d",&N, &L);
	while(L<=100){
		if((2*N-L*L+L)%(2*L)==0 && (2*N-L*L+L)/(2*L)>=0)
			break;
		else
			L++;
	}
	if(L<=100){
		for(int i=N/L-(L-1)/2; i<=N/L-(L-1)/2+L-1; i++)
			printf("%d ",i);
	}
	else{
		printf("-1");
	}
}