https://www.acmicpc.net/problem/2003
| 문제 해결방법
⭐Idea : 투 포인터 알고리즘
[JAVA] 해설 코드
package week11;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_2003 {
static int N,count;
static long M;
static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
partSum();
System.out.println(count);
}
private static void partSum() {
// start와 end가 동일하게 첫 요소를 가리키는 상태로 시작
int start = 0; int end = 0;
long sum=arr[0];
while(true) {
if(sum>=M) {
// sum이 M과 같으면 count +1
if(sum==M)
count++;
// sum에서 기존 arr[start]값 삭제 후 start 포인터 +1
sum-= arr[start++];
}else {
end++;
if(end==N)
break;
sum+= arr[end];
}
}
}
}
[제출] 메모리 및 시간
✔ 위 : for문을 사용하지 않고, 위 코드로 실행시킨 경우 ( for문 사용X )
✔ 아래 : for문으로 start , end index가 변경될 때마다 for문을 돌려준 경우 ( for문 사용 )
'알고리즘(Algorithm)의 종류, 분류 > 여러 가지 기법' 카테고리의 다른 글
[JAVA]백준 2531번: 회전 초밥 (0) | 2021.10.05 |
---|---|
[JAVA]백준 1806번: 부분합 (0) | 2021.10.04 |
[JAVA]백준 1182번: 부분수열의 합 (0) | 2021.09.30 |
[JAVA] 비트마스킹(Bit Mask) 이해하기 (0) | 2021.09.29 |