2003 수들의합2

최성현·2021년 3월 27일
0

백준 문제풀이

목록 보기
27/29

문제 링크

코드 설명

투포인터 연습을위해 대표적인 백준문제로 개념을 다시 잡았다.

포인터 2개를 이용 (left,right), int cnt(부분합 카운트용), int sum (부분합) 을 이용한다.

조건문으로 고려해야할것은

-> 1. 현재의 부분합이 목표값 이상이거나 right==원소의 갯수 이면 left를 ++
-> 2. 아니면 right++
-> 3. 현재의 부분합이 목표값과 같다면 결과count++
즉 left와 right를 무조건 증가시키는 도중에 부분의 합이 정확히 목표치일때의 count를 세는 것이다.

또한, while문 내에서 if문의 순서도 고려해야한다.

소스 코드

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
int N, M;
vector<int> a;
int main() {
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		int abc;
		cin >> abc;
		a.push_back(abc);
	}

	int left = 0;
	int right = 0;
	int sum = 0;
	int cnt = 0;
	while (1) {
		if (sum >= M) {
			sum -= a[left++];
		}
		else if (right == N) {
			break;
		}
		else {
			sum += a[right++];
		}

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

	cout << cnt;
	return 0;
}
profile
후회없이

0개의 댓글