ALGORITHM
[JAVA] 알고리즘 : two pointers - 연속된 자연수의 합
연듀
2022. 6. 26. 09:29
투포인터
import java.util.*;
public class Main {
public int solution(int n){
int answer = 0, sum = 0, lt=0;
int m=n/2+1; // 연속된 자연수의 가장 큰숫자
int[] arr = new int[m];
for(int i=0; i<m; i++) {
arr[i]=i+1;
}
for(int rt=0; rt<m; rt++){
sum+=arr[rt];
if(sum==n) answer++;
while(sum >= n){
sum-=arr[lt++];
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.print(T.solution(n));
}
}
수학적 방법
import java.util.*;
public class Main {
public int solution(int n){
int answer = 0, cnt=1;
n--;
while(n>0){
cnt++;
n=n-cnt;
if(n%cnt==0) 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.print(T.solution(n));
}
}
반응형