문제 링크
https://www.acmicpc.net/problem/11659
풀이
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const arr = input[1].split(' ').map(v => +v);
const cumsum = new Array(arr.length+1).fill(0);
const output = [];
arr.forEach((v, i) => {
cumsum[i+1] = cumsum[i] + v;
});
input.slice(2).forEach(ij => {
const [i, j] = ij.split(' ').map(v => +v);
output.push(cumsum[j]-cumsum[i-1]);
});
console.log(output.join('\n'));
처음에 무작정 arr의 i번째 부터 j번째 수를 더하여 출력하였더니 시간 초과가 났다.
cumsum 배열을 만들어서 arr의 누적합을 저장한다.
cumsum[j]에서 cumsum[i-1]을 뺀 값이 곧 arr의 i~j까지의 합과 같다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 15654] N과 M (5) with Node.js (0) | 2021.08.12 |
---|---|
[백준 2667] 단지번호붙이기 with Node.js (0) | 2021.08.09 |
[백준 5052] 전화번호 목록 with Python (0) | 2021.08.03 |
[백준 1927] 최소 힙 with Python (0) | 2021.08.02 |
[백준 11279] 최대 힙 with Python (0) | 2021.07.31 |