백준 2018 수들의 합4 [c++]

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;
}