본문 바로가기
자바 알고리즘

17. 연속 부분 수열 (sliding window + 복합)

by watergrace2u 2022. 8. 8.
반응형
SMALL

 

# 풀이 - 앞 문제처럼 sliding window 방식 사용!

 

- rt 를 쭉 증가시키면서 sum 구하기

if (sum == m) 이면 answer ++

 

- if (sum > m) => 이제 lt 증가시키기

이 때, lt 는 증가시키면서 해당 값 sum에서 빼주기

그러다가 sum == m 이면 answer++

다시 sum < m 이면, 다시 rt 증가

 

import java.util.*;

public class Main {

	public int solution(int n,int m,int []arr) {
		int answer =0;
		int lt = 0, rt = 0;
		int sum =0;
		
		while(rt<n) {
			sum += arr[rt];
			if(sum==m) answer++;
			while(sum>m) {
				sum -= arr[lt];	
				if(sum==m) answer++;
				lt++;
			}
			rt++;		
		}
		return answer;		
	}

	public static void main(String[] args) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in); 
		
		int n = kb.nextInt();
		int m = kb.nextInt();
		int []arr = new int[n];
		for(int i=0;i<n;i++) {
			arr[i] = kb.nextInt();
			
		}
        
		System.out.print(T.solution(n, m, arr));		
	}
}
반응형
LIST

'자바 알고리즘' 카테고리의 다른 글

19. 연속된 자연수의 합 (수학)  (0) 2022.08.10
18. 연속된 자연수의 합  (0) 2022.08.09
16. 최대 매출 (Sliding window)  (0) 2022.08.08
15. 봉우리  (0) 2022.08.05
14. 뒤집은 소수  (0) 2022.08.03

댓글