입력 값 N이 주어졌을때, 연속된 수들의 합으로 N을 나타낼 수 있는 경우의 수를 구하여라.
첫 줄에 정수 N이 주어진다.
입력된 자연수 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 출력하시오
연속된 수들의 합이 N이 되는 경우이기 때문에, N이하의 자연수들의 합으로 구할 수 있는 경우의 수를 구하면 된다.
1부터 순차적으로 더한 값 sum이 N보다 클 경우 가장 앞에 있는 수(start)부터 sum에서 지워주면 된다.
반대로 sum이 N보다 작을 경우에는 다음 값(end)를 계속해서 더해주는 것을 반복하여 N이 되는 경우를 찾아간다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class boj2018{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int start = 1;
int end = 1;
int sum = 0;
int result = 1;
while (end <= n) {
if (sum < n) {
sum += end;
end++;
}
else if (sum > n) {
sum -= start;
start++;
}
else {
result++;
sum += end;
end++;
}
}
System.out.println(result);
}
}