코드

import java.util.*;

// n개 == arr.length , 연속된 arr 배열 수 합이 m인 경우가 몇회인가?
class 연속부분수열 {

	public static void main(String[] args) {
		int 배열크기 = 50;
		int 합계 = 30;
		int[] arr = new Random().ints(배열크기, 1, 11).toArray();//1~10
		int answer = 0;
		System.out.println(Arrays.toString(arr));
		//핵심은 값을 증감 후 같을 수 있으니 검증로직을 한 번 더 태우는 것이다.
		for (int rt = 0, sum = 0, lt = 0; rt < arr.length;) {
			if (sum <= 합계) {
				if (sum == 합계) {
					prettyPrint(arr, lt, rt);
					answer++;
					sum -= arr[lt++];
				}
				
				sum += arr[rt++];
				
				if (sum == 합계) {
					prettyPrint(arr, lt, rt);
					answer++;
					sum -= arr[lt++];
				}
			} else {
				sum -= arr[lt++];
			}
		}
		System.out.println("총 카운트 = "+answer);
	}
	static void prettyPrint(int[] arr, int lt, int rt) {
		System.out.print("[lt="+lt+" rt="+(rt-1)+"]");
		Arrays.stream(arr, lt, rt).forEach(n->System.out.print(n+","));
		System.out.println();
	}
	
}

결과

[2, 9, 1, 3, 6, 4, 7, 4, 10, 4, 9, 10, 4, 6, 5, 2, 2, 5, 6, 3, 5, 10, 1, 8, 5, 9, 3, 8, 1, 5, 8, 6, 8, 2, 10, 8, 6, 8, 6, 1, 1, 7, 6, 5, 7, 7, 7, 9, 1, 3]
[lt=1 rt=6]9,1,3,6,4,7,
[lt=12 rt=18]4,6,5,2,2,5,6,
[lt=17 rt=22]5,6,3,5,10,1,
[lt=28 rt=33]1,5,8,6,8,2,
[lt=35 rt=40]8,6,8,6,1,1,
[lt=44 rt=47]7,7,7,9,
총 카운트 = 6

 

'자료구조&알고리즘 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비' 카테고리의 다른 글

K번째 큰 수  (0) 2022.11.27
연속된 자연수의 합  (0) 2022.11.25
교집합  (0) 2022.11.20
두배열합치기  (0) 2022.11.17
중복문자제거  (0) 2022.11.14

+ Recent posts