본문 바로가기
알고리즘/문자열, 정렬

[알고리즘] 연속된 자연수의 합 with Java

by VIPeveloper 2022. 3. 12.
반응형

오늘 배운 것

1. 로직

. 어제 배웠던 포인터 문제랑 유사하다는 것을 알게 됨. for문을 작성하는 방법 및 로직 흐름에 대해 배웠다.

2. 코드

import java.util.Scanner;

public class Main {

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

    private static void solution(int n) {
        int [] arr = new int[n];
        for (int i = 1; i < arr.length; i++) {
            arr[i] = i;
        }
        int lt=1,tmp_sum=0,answer=0;
        for (int i = 0; i < arr.length; i++) {
            tmp_sum += arr[i];
            if(tmp_sum == n) {
                answer++;
            }
            while(tmp_sum >= n){
                tmp_sum -= arr[lt++];
                if(tmp_sum==n) {
                    answer++;
                }
            }
        }
        System.out.println(answer);
    }
}

. 특이한 풀이법도 있다. 자연수를 하나씩 더해가며 나머지를 구하는 방법이다.

import java.util.Scanner;

public class Main {

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

    private static void solution(int n) {
        int answer = 0, cnt = 1;
        n--;
        while(n>0){
            cnt++;
            n-=cnt;
            if(n%cnt==0){
                answer++;
            }
        }
        System.out.println(answer);
    }
}
반응형