Algorithm/문제 풀이
연속된 자연수의 합
ilyadelavie
2022. 5. 20. 14:16
문제
N입력으로 양의 정수 N이 입력되면 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력하는 프로그램을 작성하세요.
만약 N=15이면
7+8=15
4+5+6=15
1+2+3+4+5=15
입력
첫 번째 줄에 양의 정수 N(7<=N<1000)이 주어집니다.
출력
첫 줄에 총 경우수를 출력합니다.
Key Point
- 연속된 자연수 합이 n이 되려면 자연수의 가장 큰 값 max는 최대 n/2+1이 된다.
- two pointer 알고리즘 사용
코드
내 풀이
import java.util.Scanner;
public class Main {
public int solution(int n){
int max = n/2+1;
int sum =0;
int [] arr = new int[max];
int s=0;
int count = 0;
for(int i=0;i<max;i++){
arr[i] = i+1;
}
for(int e=0; e<max;e++){
sum+=arr[e];
if (sum==n) count++;
while (sum>=n){
sum-=arr[s++];
if(sum==n) count++;
}
}
return count;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(T.solution(n));
}
}
이건 왜 안될까?
더보기
import java.util.Scanner;
public class Main {
public int solution(int n){
int max = n/2+1;
int [] arr = new int[max];
int s=0;
int e=arr.length-1;
int count = 0;
for(int i=0;i<max;i++){
arr[i] = i+1;
}
while(s<e){
int sum = arr[s]+arr[e];
if(sum<=n)
s++;
else if(sum>n)
e--;
if(sum==n)
count++;
}
return count;
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
System.out.println(T.solution(n));
}
}