백준 문제풀이

1024번: 수열의 합

하다블 2022. 3. 23. 19:04
반응형

문제는 다음과 같습니다.

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

 

1024번: 수열의 합

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

www.acmicpc.net

풀이 코드는 다음과 같습니다.

 

#include<iostream>
using namespace std;

int main()
{
	int L;
	int N;
	cin >> N >> L;
	for (int i{ L }; i <= 100; i++)
	{
		int temp = N - i * (i + 1) / 2;
		if (temp % i == 0)
		{
			int j = temp / i + 1;
			if (j >= 0)
			{
				for (int k{ 0 }; k <i; k++)
				{
					cout << k + j << " ";
				}
				cout << endl;
				return 0;
			}
		}
	}
	cout << "-1" << endl;
	return 0;
}

N은 결국 수열의 합으로, x+(x+1)+(x+2)+...+(x+(L-1)) 과 같은 꼴이며

식으로 풀어 쓰게 되면 N=L*x +(1+2+3+4..+L-1) = L*x+( (L-1)*L )/2 의 꼴 이므로

x에 관한 식으로 풀어 쓰는 문제입니다.

이 문제는 문제를 보고 바로 코딩하지 말고 종이와 펜을 잡으라는 예를 들기에 가장 좋은 예시라고 생각합니다.

처음 읽을 때에는 문제도 굉장히 짧고 방식도 간단하기 때문에 바로 코딩할 수 있을 것이라고 생각하지만 종이로 x에 관한 식을 한 번이라도 써 보는 것과 쓰지 않은 것은 차이가 큽니다.

여러분들도 종이와 펜을 잡고 미리 끄적여본 다음 코딩해보시는 것을 추천드립니다.

반응형

'백준 문제풀이' 카테고리의 다른 글

1598번: 꼬리를 무는 숫자 나열  (0) 2022.03.23
13311번[스페셜 저지]: 행운의 편지  (0) 2022.03.23
1111번 : IQ Test  (0) 2022.03.23
1037번: 약수  (0) 2022.03.23
1009번: 분산처리  (0) 2022.03.23