Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- java
- 알고리즘
- 스프링부트 도커
- 프로그래머스
- 큐
- Programmers
- 스택
- Queue
- 이진수 변환
- index of
- 백준 N과 M 자바
- 오름차순 정렬
- 삼각형의 완성조건
- SWEA
- lv0
- 버퍼
- 프로그래머스 문자열 정렬
- 클라이언트
- 백준
- 프로그래머스 풀이
- Stack
- 문자열
- 프로그래머스 자바
- 스프링부트 도커로 배포
- Lv1
- lv2
- COS Pro
- StringTokenizer
- 스프링부트 도커 배포
- 자바
Archives
- Today
- Total
mun dev
[백준] 2003 수들의 합2 자바 본문
문제설명
N개의 수로 된 수열 A[1], A[2], …, A[N] 이 있다. 이 수열의 i번째 수부터 j번째 수까지의 합 A[i] + A[i+1] + … + A[j-1] + A[j]가 M이 되는 경우의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.
출력
첫째 줄에 경우의 수를 출력한다.
✅ 통과한 코드
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int sum = 0;
int cnt = 0, start = 0,end=0;
while(end<=n){
if(sum==m){ //합이 m과 같다면 cnt 증가
cnt++;
sum-=arr[start++]; //값을 빼주고 start++
}else if(sum<m){ //합이 m보다 작다면
if(end==n) break; // end가 맨 끝이라면 끝내기
sum+=arr[end++]; // 값을 더하고 end++
}else{ //합이 m보다 크거나 같다면
sum-=arr[start++]; //값을 빼주고 start++
}
}
System.out.print(cnt);
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 11399 ATM 자바 (0) | 2023.04.15 |
---|---|
[백준] 2164 카드2 자바 (0) | 2023.04.14 |
[백준] 2606 바이러스 자바 (0) | 2023.04.05 |
[백준] 1260 DFS와 BFS 자바 (0) | 2023.03.30 |
[백준] 9506 약수들의 합 자바 (0) | 2023.03.26 |