반응형
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 |
댓글