삐까냥의 파도타기

Q2167. 2차원 배열의 합 본문

코딩/백준 알고리즘

Q2167. 2차원 배열의 합

금손형아 2019. 2. 11. 22:21

값들의 합을 저장하며 나아가는 로직.

array[0][0]부터 array[i][j]까지의 합 : sumArray[i][j] = sumArray[i-1][j] + array[i][j] + sumArray[i][j-1] - sumArray[i-1][j-1];

array[y1][x1]부터 array[y2][x2]까지의 합 : sumArray[y2][x2] - sumArray[y1-1][x2] - sumArray[y2][x1-1] + sumArray[y1-1][x1-1];



import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.util.StringTokenizer;


public class Q2167 {


static long[][] array;

static long[][] sumArray;

public static void main(String[] args) throws Exception {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

StringTokenizer st = new StringTokenizer(br.readLine());

int y = Integer.valueOf(st.nextToken());

int x = Integer.valueOf(st.nextToken());

array = new long[y+1][x+1];

sumArray = new long[y+1][x+1];

for (int i = 1; i <= y; i++) {

st = new StringTokenizer(br.readLine());

for (int j = 1; j <= x; j++) {

array[i][j] = Integer.valueOf(st.nextToken());

sumArray[i][j] = sumArray[i-1][j] + array[i][j] + sumArray[i][j-1] - sumArray[i-1][j-1];

}

}

st = new StringTokenizer(br.readLine());

int num = Integer.valueOf(st.nextToken());

for (int n = 1; n <= num; n++) {

st = new StringTokenizer(br.readLine());

int y1 = Integer.valueOf(st.nextToken());

int x1 = Integer.valueOf(st.nextToken());

int y2 = Integer.valueOf(st.nextToken());

int x2 = Integer.valueOf(st.nextToken());

long sum = sumArray[y2][x2] - sumArray[y1-1][x2] - sumArray[y2][x1-1] + sumArray[y1-1][x1-1];

System.out.println(sum);

}

}


'코딩 > 백준 알고리즘' 카테고리의 다른 글

Q11055. 가장 큰 증가 수열  (0) 2019.02.14
Q11048. 이동하기  (0) 2019.02.12
Q11057. 오르막 수  (0) 2019.02.10
Q9461. 파도반 수열  (0) 2019.02.10
Q9465. 스티커  (0) 2019.02.10