알고리즘/JAVA

5. 연속된 자연수의 합

vivi 2021. 9. 16. 01:10
import java.util.*;

class Main {
	public int solution(int N) {
		int answer = 0;
		for (int i = 1; i < N; i++) {
			int temp = 0;
			for (int j = i; j < N; j++) {
				temp += j;
				if (temp > N)
					break;
				else if (temp == N) {
					answer++;
					break;
				}
			}
		}
		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));
		kb.close();
	}

}

O(n^2)

 

import java.util.*;

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));
		kb.close();
	}
}

투 포인터 알고리즘으로 O(n)