투포인터
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));
}
}
'ALGORITHM' 카테고리의 다른 글
[JAVA] 알고리즘 : 배열 - 소수(에라토스테네스 체) (0) | 2022.06.27 |
---|---|
[JAVA] 알고리즘 : 배열 - 피보나치 수열 (0) | 2022.06.27 |
[JAVA] 백준 12847번- 꿀 아르바이트 (0) | 2022.06.26 |
[JAVA] 백준 2018번- 수들의 합 5 (0) | 2022.06.23 |
[JAVA] 백준 1940번- 주몽 (0) | 2022.06.22 |