반응형
문제
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;
}
반응형
'프로그래밍 > 백준(BOJ)' 카테고리의 다른 글
[백준(BOJ) / C++][Silver Ⅳ] 1940번 : 주몽 (0) | 2024.06.17 |
---|---|
[백준(BOJ) / C++][Gold Ⅲ] 10986번 : 나머지 합 (0) | 2024.06.16 |
[백준(BOJ) / C++][Silver Ⅰ] 11660번 : 구간 합 구하기 5 (0) | 2024.06.13 |
[백준(BOJ) / C][Bronze Ⅱ] 10811번 : 바구니 뒤집기 (1) | 2024.02.12 |
[백준(BOJ) / C][Bronze Ⅰ] 10798번 : 세로읽기 (0) | 2024.01.28 |