티스토리 뷰

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

 

11441번: 합 구하기

첫째 줄에 수의 개수 N이 주어진다. (1 ≤ N ≤ 100,000) 둘째 줄에는 A1, A2, ..., AN이 주어진다. (-1,000 ≤ Ai ≤ 1,000) 셋째 줄에는 구간의 개수 M이 주어진다. (1 ≤ M ≤ 100,000) 넷째 줄부터 M개의 줄에는

www.acmicpc.net

 

🤔 해결방법

1. 0인 요소가 n+1개인 배열을 만들고 누적 합산 숫자를 해당 인덱스에 넣어준다

2. 끝지점 요소에서 시작요소-1 까지 뺀 값을 차례로 개행하여 출력한다

 

 

🔑 풀이

문제를 읽자마자 바로 구간의 합을 하나씩 더해주도록 풀었다.

역시나 호락호락하지 않은 백준은 시간초과를 뱉어냈다.😥

const input = require("fs")
    // .readFileSync("/dev/stdin")
    .readFileSync(__dirname + "/input.txt")
    .toString()
    .trim()
    .split("\n");
  const [...numbers] = input[1].split(" ").map(Number);

  let range = [];
  let answer = "";

  for (let i = 3; i < 3 + Number(input[2]); i++) {
    range.push(input[i].split(" ").map(Number));
  }

  for (i = 0; i < range.length; i++) {
    let sum = 0;
    for (j = range[i][0] - 1; j <= range[i][1] - 1; j++) {
      sum += numbers[j];
    }
    answer += sum + "\n";
  }
  console.log(answer);

 

구글링해보니 누적 합으로 풀어야 시간초과가 안난다는 것을 알 수 있었다.

0인 요소가 n+1개인 배열을 만들어 누적 합산 숫자를 해당 인덱스에 넣어주고

i부터 j까지 구간의 합 = j까지의 합 - (i-1)까지의 합임을 이용해 푸는 문제였다.

누적 합을 이용한 코드는 다음과 같다.

const input = require("fs")
    .readFileSync("/dev/stdin")
    //.readFileSync(__dirname + "/input.txt")
    .toString()
    .trim()
    .split("\n");
  const [...numbers] = input[1].split(" ").map(Number);

  let range = [];
  let answer = "";

  for (let i = 3; i < 3 + Number(input[2]); i++) {
    range.push(input[i].split(" ").map(Number));
  }

  // 누적 합 배열
  let sumArray = new Array(numbers.length).fill(0);
  sumArray[0] = numbers[0];
  for (let i = 1; i < numbers.length; i++) {
    sumArray[i] = sumArray[i - 1] + numbers[i];
  }

  for (i = 0; i < range.length; i++) {
    let sum = 0;
    let start = range[i][0] - 1;
    let end = range[i][1] - 1;

    if (start === 0) {
      answer += sumArray[end] + "\n";
    } else {
      answer += sumArray[end] - sumArray[start - 1] + "\n";
    }
  }
  console.log(answer);

 

'JS-algorithm > BOJ' 카테고리의 다른 글

[백준] 평범한 배낭 (javascript)  (0) 2023.08.28
[백준] 스택 수열 (javascript)  (0) 2023.07.25
[백준] 촌수계산 (javascript)  (0) 2023.07.16
댓글