매개변수 n이 10000이하여서 이중 for문으로도 풀리지만 더 효율적인 방법은 없을까 생각했습니다. 연속된 수의 합이 n이면 되는 것이므로 1부터 n까지의 수를 배열에 순서대로 넣어주고 변수 sum이 n과 같으면 answer의 카운트를 증가시키고, end 값을 증가시킵니다. 마찬가지로 sum이 n보다 작으면 end 변수를 증가시키고, n보다 크면 start 변수 값을 증가시키는 방식으로 로직을 구현했습니다.
class Solution {
public int solution(int n) {
int answer = 1;
int[] list = new int[n+1];
for(int i=1; i<=n; i++){
list[i] = i;
}
int start = 1;
int end = 2;
int sum = list[start];
while(end <= n){
if(sum < n) sum += list[end++];
else if(sum == n) {
answer++;
sum += list[end++];
}
else if(sum > n) sum -= list[start++];
}
return answer;
}
}
연속된 자연수 중엔 합이 n 자기 자신인 경우도 포함되므로 경우의 수가 1인 상태로 시작해야하므로 answer를 1로 초기화한 상태로 코드를 구현했습니다. 또한, 배열 인덱스 시작이 1부터 이므로 start를 1, end를 2로 초기화해야 합니다.