[백준 알고리즘] 2143번 두 배열의 합 node.js JavaScript JS

 

2143번: 두 배열의 합

첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그

www.acmicpc.net

😉문제 설명

두 배열에서 연속된 합의 숫자를 찾은 값의 합이 T가 되는 경우의 수를 찾습니다.

  1. A배열에서 찾을 수 있는 경우의 수를 찾아 객체에 넣습니다. 이 객체는 key값으로 만들 수 있는 숫자를, value로 key값을 만들 수 있는 횟수를 넣습니다.
  2. B배열에서 찾을 수 있는 경우의 수를 만들며 이 수와 A배열로 만들어진 객체의 값을 더해 T값이 나올 수 있는 경우를 찾습니다.

😎문제 풀이

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\\n")
const [T,n,m] = [+input[0],+input[1],+input[3]];
const A = input[2].split(" ").map(Number)
const B = input[4].split(" ").map(Number)

const A_map = {}
for(let i=0; i<n; i++){
  let sum = 0;
  for(let j=i; j<n; j++){
    sum += A[j]
    if(A_map[sum]) A_map[sum]++
    else A_map[sum] = 1;
  }
}

let answer = 0;
for(let i=0; i<m; i++){
  let sum = 0;
  for(let j=i; j<m; j++){
    sum += B[j]
    if(A_map[T-sum]){
      answer += A_map[T-sum]
    }
  }
}

console.log(answer)