이전에 풀었던 개념인 것 같은데 다시 풀어보니 어려웠습니다... 투 포인터 알고리즘으로 풀지 않으면, 시간 초과가 발생하는 문제...
투 포인터는 말 그대로 두 개의 pointer를 사용하여 구간 합의 시작과 끝을 나타냅니다.
다음과 같이 루프에서 구간 합이 N 보다 작을 때, 클 때, 같을 때의 조건을 구분하여 로직을 수행해줍니다. 그리고 끝 포인트가 N과 같을 때 루프를 탈출하도록 구현합니다.
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int start_idx = 1, end_idx = 1, count = 1;
long sum = 1;
while(end_idx != N){
if(sum < N){
end_idx++;
sum += end_idx;
}
else if(sum == N){
end_idx++;
sum += end_idx;
count++;
}
else if(sum > N){
sum -= start_idx;
start_idx++;
}
}
br.close();
System.out.println(count);
}
}