알고리즘/투포인터

[백준] 2018 수들의 합 5

HJ39 2023. 5. 5. 01:49

투포인터를 이용하여 연속한 숫자의 합이 입력 값 N과 같아지는 경우의 수를 찾는 문제이다.

 

first, second 두 변수를 이용하여

sum <= N 경우 second를 증가시키고

sum > N 경우 first를 증가시켰다.

 

 

#include <bits/stdc++.h>

using namespace std;

void num2018(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    int N; cin>>N;
    
    int count = 0;
    int first = 1;
    int second = 1;
    int sum = 0;
    
    while(1){
        if(sum == N)
            count++;
        
        if(first == N )
            break;
        
        if(sum <= N){
            sum += second;
            second++;
        }
        else if(sum > N){
            sum -= first;
            first++;
        }
    }
    
    if(N==1)
        cout<<"1\n";
    else
        cout<<count<<"\n";
}