Recent Posts
Link
250x250
오늘보다 더 나은 내일의 나에게_
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q05_ 연속된 자연수의 합 본문
ALGORITHM/inflearn_javaAlgorithm
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q05_ 연속된 자연수의 합
chan_96 2022. 4. 6. 20:21728x90
설명
N입력으로 양의 정수 N이 입력되면 2개 이상의 연속된 자연수의 합으로 정수 N을 표현하는 방법의 가짓수를 출력하는 프로그램을 작성하세요.
만약 N=15이면
7+8=15
4+5+6=15
1+2+3+4+5=15
와 같이 총 3가지의 경우가 존재한다.
입력
첫 번째 줄에 양의 정수 N(7<=N<1000)이 주어집니다.
출력
첫 줄에 총 경우수를 출력합니다.
예시 입력1
예시 출력15 3
코드
내가 입력한 코드
더보기package twoPointers_SlidingWindow; import java.util.Scanner; public class Q05 { public int solution(int n) { int answer = 0, sum = 0,lt = 1; for(int rt = 1;rt < n;rt++) { sum += rt; if(n == sum) answer++; while(sum >= n) { sum -= lt++; if(n == sum) { answer++; break; } }// end of while } return answer; } public static void main(String[] args) { Q05 T = new Q05(); Scanner kb = new Scanner(System.in); int n = kb.nextInt(); System.out.println(T.solution(n)); } }
해설 코드
더보기import java.util.*; class Main { public int solution(int n){ int answer=0, sum=0; int m=n/2+1; int[] arr=new int[m]; for(int i=0; i<m; i++) arr[i]=i+1; int lt=0; 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)); } }
풀이 및 정리
-
728x90
'ALGORITHM > inflearn_javaAlgorithm' 카테고리의 다른 글
자바 알고리즘 문제 풀이 HashMap_TreeSet Q01_ 학급 회장 (0) | 2022.04.08 |
---|---|
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q06_ 최대 길이 연속부분수열 (0) | 2022.04.08 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q04_ 연속 부분수열 (0) | 2022.03.30 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q03_ 최대 매출 (0) | 2022.03.29 |
자바 알고리즘 문제 풀이 Two pointers, Sliding window Q02_공통원소구하기 (0) | 2022.03.21 |
Comments