ALGORITHM

[JAVA] 알고리즘 : two pointers - 연속된 자연수의 합

연듀 2022. 6. 26. 09:29

투포인터

import java.util.*;
public class Main {
    public int solution(int n){

        int answer = 0, sum = 0, lt=0;
        int m=n/2+1; // 연속된 자연수의 가장 큰숫자
        int[] arr = new int[m];
        for(int i=0; i<m; i++) {
            arr[i]=i+1;
        }
        for(int rt=0; rt<m; rt++){
            sum+=arr[rt];
            if(sum==n) answer++;
            while(sum >= n){
                sum-=arr[lt++];
                if(sum==n) answer++;
            }
        }
        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n=kb.nextInt();

        System.out.print(T.solution(n));
    }
}

 

 

수학적 방법

import java.util.*;
public class Main {
    public int solution(int n){

        int answer = 0, cnt=1;
        n--;
        while(n>0){
            cnt++;
            n=n-cnt;
            if(n%cnt==0) answer++;
        }

        return answer;
    }

    public static void main(String[] args){
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n=kb.nextInt();

        System.out.print(T.solution(n));
    }
}