코딩 테스트/알고리즘 문제풀이

연속된 자연수의 합

리져니 2021. 8. 16. 18:30

설명

N입력으로 양의 정수 N이 입력되면 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력하는 프로그램을 작성하세요.

만약 N=15이면

7+8=15

4+5+6=15

1+2+3+4+5=15

와 같이 총 3가지의 경우가 존재한다.

 

입력

첫 번째 줄에 양의 정수 N(7<=N<1000)이 주어집니다.

 

출력

첫 줄에 총 경우수를 출력합니다.

 

예시 입력 1 

15

 

예시 출력 1

3


 

제출1

    public static int solution(int n){
        int answer = 0;
        int curr = 0;
        int p1=1, p2=1;

        while(p1<n && p2<n ){
            curr += p2++;
            if(curr == n){
                answer++;
                curr = 0;
                p2 = p1+1;
                p1+=1;
            }else if(curr > n){
                p2 = p1+1;
                p1+=1;
                curr = 0;
            }
        }

        return answer;
    }

 

 

 

제출2


    public static int solution(int n) {
        int answer=0, lt=0, sum=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;
    }
728x90

'코딩 테스트 > 알고리즘 문제풀이' 카테고리의 다른 글

학급 회장  (0) 2021.08.18
최대 길이 연속부분수열  (0) 2021.08.18
연속 부분수열  (0) 2021.08.16
최대 매출  (0) 2021.08.16
공통원소 구하기  (0) 2021.08.16