삐까냥의 파도타기
Q2167. 2차원 배열의 합 본문
값들의 합을 저장하며 나아가는 로직.
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 |