[백준 알고리즘] Node.js 2167. 2차원 배열의 합

2023. 12. 18. 12:03코딩연습

1. 문제

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

 

2167번: 2차원 배열의 합

첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는

www.acmicpc.net

 

2. 풀이

  • 첫째줄에는 2차원 배열의 크기를 알려준다. 이를 바탕으로 2차원 배열을 만들어준다.
  • K 값을 이용하여 반복문을 작성하고, 각각 i, j, x, y 를 이용하여 합을 구해주면 된다.
    • (1,1) 부터 (2,3) 까지의 합은 (1,1) + (1,2) + (1,3) + (2,1) + (2,2) + (2,3) 의 합이 된다. 
const inputs = require('fs').readFileSync('/dev/stdin')
               .toString().trim().split("\n")
const [N, M] = inputs.shift().split(' ').map(v => +v); // N, M 값 구해주고
const graph = Array.from({length : N}, () => new Array(M).fill()); // 2차원 배열을 만들 변수 설정.

// 반복문을 통해 변수에 담아줌.
for(let i = 0; i < N; i++){
  const temp = inputs.shift().split(" ").map(v => +v);
  for(let j = 0; j < M; j++){
    graph[i][j] = temp[j]
  }
}

const K = +inputs.shift(); // K 값 구해주고

// 누적합을 계산해줄 함수.
const findAns = (arr) => {
  // 1을 빼준 이유는 주어진 문제에서처럼 (1,1)을 그대로 설정하는 것이 아니라
  // 2차원 배열을 설정할 때, (0,0) 부터 시작하도록 만들었기 때문.
  const [i,j,x,y] = arr.split(" ").map(v => +v-1); 
  let sum = 0;

  for(let a = i; a <= x; a++){
    for(let b = j; b <= y; b++){
      sum += graph[a][b];
    }
  }

  return sum;
}

let answer = ""
for(let i = 0; i < K; i++){
  answer += `${findAns(inputs[i])}\n`
}

console.log(answer)

 

 

3. 정리

  • 풀이가 한 눈에 보이면 어느정도 풀 자신이 있는데..... 아직도 못 푸는 문제가 많다. ㅠㅠ