1.lt, rt 이용
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public int solution(int n){
int answer=0, lt=0, sum=0;
int m = n/2+1; // 8
int[] arr = new int[m];
// 입력 15 출력 3
// 15일때 8까지만 보면됨 8 9는 볼필요 X
// (2로 나눈 나머지=7 + 1 -> 8 까지만 돌리면됨
for(int i=0; i<m; i++){ //1,2,3,4,5,6,7,8
arr[i]=i+1;
}
for(int rt=0; rt<m; rt++){
sum+=arr[rt];
if(sum==n) answer++;
while(sum>=n) { //하나 빼고 나서도 합이 더 클 수 있으므로 while
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));
}
}
2.수학적 방법이용
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public int solution(int n){
int answer=0;
int cnt=1; // cnt는 연속된 자연수의 갯수
n--;
while(n>0){
cnt++; // 2일 때 / 3일 때 / 4일 때
n=n-cnt; // n은 12 / n은 9 / n은 5
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));
}
}
2개 합 입력 정수에 1,2를 빼고 2로 정확하게 나누어 떨어질 때 몫을 1과 2에 6을 더한다.//7+8
3개 합 입력 정수에 1,2,3을 빼고 3으로 정확하게 나누어 떨어질 때 몫을 1,2,3에 3을 더한다.//4+5+6
4개 합 입력 정수에 1,2,3,4을 빼고 4로 정확하게 ~ -> 5는 4로 안나누어 떨어짐
5개 합 입력 정수에 1,2,3,4,5 빼고 5로 정확하게 ~ -> 0은 5로 나누어 떨어짐 몫은 0 //1+2+3+4+5
'Algorithm > inflearn' 카테고리의 다른 글
#학급 회장(Hash) (0) | 2021.09.15 |
---|---|
★최대 길이 연속부분수열 (0) | 2021.09.15 |
★연속 부분수열 (0) | 2021.09.14 |
★공통원소 구하기 (0) | 2021.09.13 |
#★두 배열 합치기 (0) | 2021.09.13 |