
자연수 N을 몇 가지 방법의 연속된 자연수 합으로 나타낼 수 있는지를 구하는 문제
투포인터를 사용해 왼쪽과 오른쪽 포인터가 같이 1부터 시작해 만약 합이 N보다 작으면 오른쪽 포인터를 늘리고 N보다 크면 왼쪽 포인터를 늘려서 구할 수 있을 것이다. -> 이렇게 하면 연속된 자연수로만 합을 구할 수 있다.
import java.util.Scanner;
public class 수들의_합_5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
//투포인터 지정
int start = 1;
int end = 1;
//누적합이어야 하기 때문에 따로 선언
int sum = 1;
int count = 0;
//왼쪽 포인터까 N이 될때까지지
while (start <= N) {
//누적합이 N보다 크면 start 부분을 빼줌
if (sum > N) {
sum = sum - start;
start++;
}
//누적합이 N보다 작으면 end 하나 늘리고 더해줌
else if (sum < N) {
end++;
sum = sum + end;
}
//누적합이 N이면 count를 늘려주고
else {
count++;
//방법을 여러개 찾기 위해 end를 또 늘려줌
end++;
//누적합도 늘려주기
sum = sum + end;
}
}
System.out.println(count);
}
}