프로그래밍/백준(BOJ)
[백준(BOJ) / C++][Silver Ⅴ] 2018번 : 수들의 합 5
데굴데굴이
2024. 6. 16. 23:38
반응형
문제
https://www.acmicpc.net/problem/2018
풀이
1. 숫자를 가리키는 포인터 두개(start_index, end_index)를 준비한다.
2. 해당 포인터 사이의 값(sum)에 따라 포인터를 옮겨준다.
2-1. sum > N
sum의 값이 N 보다 높을 경우 sum의 값을 현재 start_index 값만큼 줄여주고 start_index 값을 올려준다.
sum = sum - start_index;
start_index++;
2-2. sum < N
sum의 값이 N 보다 작을 경우 end_index 를 높여주고 그 후 end_index의 값을 더해준다.
end_index++;
sum = sum + end_index;
2-3. sum == N
sum의 값이 N과 같을 경우 해당 합은 맞다는 뜻이므로 count를 올려주고 다음 index도 확인하기 위해 end_index를 올려준다. 그 후 end_index의 값을 더해준다.
end_index++;
sum = sum + end_index;
count++;
3. '2번째' 를 end_index가 N의 값이 될떄까지 반복한다.
소스코드
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
int count = 1;
int start_index = 1;
int end_index = 1;
int sum = 1;
while(end_index != N)
{
if(sum == N)
{
count++;
end_index++;
sum = sum + end_index;
}
else if(sum > N)
{
sum = sum - start_index;
start_index++;
}
else
{
end_index++;
sum = sum + end_index;
}
}
cout << count << "\n";
return 0;
}
반응형