본문 바로가기

컴퓨터/Online Judge

[acmicpc.net] 2167 2차원 배열의 합

문제 링크 : https://www.acmicpc.net/problem/2167


문제 내용

2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다.


소스코드


#include <iostream>
using namespace std;
 
int main() {
    // your code goes here
    int X, Y;
    int ** arr;
    int ** sum_arr;
     
    cin >> X; cin >> Y;
    arr = new int*[X+2];
    sum_arr = new int*[X+2];
    for(int i=0; i<=X+1; i++){
        arr[i] = new int[Y+2];
        sum_arr[i] = new int[Y+2];
    }
     
    for(int i=1; i<X+1; i++){
        for(int j=1; j<Y+1; j++){
            cin >> arr[i][j];
        }
    }
    for(int i=0; i<=X+1; i++){
        arr[i][0] = 0;
        sum_arr[i][0] = 0;
    }
    for(int j=0; j<=Y+1; j++){
        arr[0][j] = 0;
        sum_arr[0][j] = 0;
    }
         
    for(int i=1; i<X+1; i++){
        for(int j=1; j<Y+1; j++){
            sum_arr[i][j] = sum_arr[i][j-1] + sum_arr[i-1][j] - sum_arr[i-1][j-1] + arr[i][j];
        }
    }
     
    int K, i,j,x,y;
    cin >> K;
    for(int k=0; k<K; k++){
        cin >> i; cin >> j; cin >> x; cin >> y;
        cout << (sum_arr[x][y] - sum_arr[x][j-1] - sum_arr[i-1][y] + sum_arr[i-1][j-1]) << endl;
    }
    return 0;
}



'컴퓨터 > Online Judge' 카테고리의 다른 글

[acmicpc.net] 2293 동전 1  (0) 2016.09.20
[acmicpc.net] 1932 숫자삼각형  (0) 2016.09.18
[acmicpc.net] 2167 2차원 배열의 합  (0) 2016.09.11
[acmicpc.net] 2579 계단 오르기  (0) 2016.09.09
[acmicpc.net] 2193 이친수  (0) 2016.09.08
[acmicpc.net] 1463 1로 만들기  (0) 2016.09.07