[백준] 2143번 두 배열의 합 (C++)

0

boj

목록 보기
5/9

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

이 문제는 비교적 쉽게 풀 수 있었다.
A배열과 B배열의 누적 합을 미리 전처리 해준 뒤, MAP 자료구조를 이용해 해결했다.

  1. A배열을 전처리하는 과정에서 sum을 map[sum]++ 해준다.
  2. B배열을 전처리하는 과정에서 map[T-sum]인 값을 결과에 더해준다.

자료형을 int가 아닌 long long으로 해야한다.

#include <iostream>
#include <map>
using namespace std;

int a[1001];
int b[1001];
map<long long , long long> sub_sum;

int main() {
	long long T;
	int n, m;
	cin >> T;
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
	cin >> m;
	for (int i = 0; i < m; i++)
		cin >> b[i];

	for (int i = 0; i < n; i++) { // 개수
		for (int j = 0; j < n - i; j++) { // 시작
			int idx = j; long long sum = 0;
			while (idx <= i + j) {
				sum += a[idx++];
			}
			sub_sum[sum]++;
		}
	}
	long long ret = 0;
	for (int i = 0; i < m; i++) { // 개수
		for (int j = 0; j < m - i; j++) { // 시작
			int idx = j; long long sum = 0;
			while (idx <= i + j) {
				sum += b[idx++];
			}
			ret += sub_sum[T - sum];
		}
	}
	cout << ret;
}

0개의 댓글