import java.util.*;
class Main {
public int solution(int n) {
int answer = 0,sum =0, start = 1;
for(int end = 1; end<=n/2+1; end++) {
sum += end;
if(sum == n) answer++;
while(sum>=n) {
sum -= start++; //3 4 5
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.println(T.solution(n));
}
}
풀이는 바로 이전문제와 동일하다.
for문의 길이를 n/2+1로 잡는 이유는,
n=15라면 최대 7+8 즉, (15/2) + (15/2+1)를 넘어가는 순간
무조건 15초과의 값이 나와버리기 때문이다.
만약 n이 10이어도 4+5를 넘어가는 순간 다음 연속된 수는 10이 절대 나올수 없다.
while문에서 sum>=m 일때 start값을 sum<m이 되도록 계속 빼주는 과정을 이해하자!