백준 2018 수들의 합4 [c++]
in Develop / Solving
c++
c++ 연습을 위해 당분간 알고리즘 부족한 부분의 기초 문제를 c++로 해결하려 한다!!
문제 분석
- 숫자 하나가 주어지고,
- 1부터 부분합으로 숫자를 만들 수 있는 경우의 수를 출력할 것.
입력조건
숫자 N
풀이과정
- 투포인터의 정석 같은 문제.
- 투포인터로 r을 끝까지 올려보고, l을 올려보며 판단.
전체 코드
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num;
int l = 1;
int r = 1;
int sum = 1;
int ans = 0;
while(r <= num){
if(sum < num) sum += ++r;
else if(sum > num) sum -= l++;
else {
ans++;
sum -= l++;
sum += ++r;
}
// printf("sum %d\n", sum);
}
while(sum >= num){
sum -= l++;
if(sum == num) {
ans++;
break;
}
}
cout << ans;
}