반응형
문제는 다음과 같습니다.
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 |