본문 바로가기

algorithm/Two Pointer

[C++] BOJ 2003 수들의 합 2

문제

백준 2003번 수들의 합 2

https://www.acmicpc.net/problem/2003

 

2003번: 수들의 합 2

첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다.

www.acmicpc.net

코드

#include<iostream>
using namespace std;

int n, m, arr[100001], sum=0;

int main() {
	cin >> n >> m;
	for (int i = 0; i < n; i++)cin >> arr[i];
	int cnt = 0, start = 0, end = 0;
	while(end<=n){
		if (sum >= m) {
			sum -= arr[start];
			start++;
		}
		else{
			sum += arr[end];
			end++;
		}

		if(sum==m)
			cnt++;
	}
	cout << cnt;
}

풀이방법

투포인터를 이용한다.

고민과정

오랜만에 해서 알고리즘 자체가 헷갈렸다.

'algorithm > Two Pointer' 카테고리의 다른 글

[C++] BOJ 2559 수열  (0) 2021.05.14
[C++] BOJ 11728 배열 합치기  (0) 2021.05.14
[C++] BOJ 10025 The Lazy Cow  (0) 2021.05.14