[백준/BOJ] 백준 2003번 : 수들의 합 2

2020. 8. 22. 08:27알고리즘 문제풀이

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>
#include <algorithm>
#include <vector>
using namespace std;

int n, m;
vector<int> input;

int main()
{
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);

	int temp;

	cin >> n >> m;

	for (int i = 0; i < n; i++)
	{
		cin >> temp;
		input.push_back(temp);
	}

	//투 포인터 알고리즘을 사용했다
	int start_pointer = 0;
	int end_pointer = 0;
	int sum = 0;
	int cnt = 0;

	while (1)
	{
		if (sum >= m)
		{
			sum -= input[start_pointer];
			start_pointer++;
		}

		else if (end_pointer == n)
		{
			break;
		}

		else if (sum < m)
		{
			sum += input[end_pointer];
			end_pointer++;
		}

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

	cout << cnt;

	return 0;
}