2167 - 2차원 배열의 합

2167 문제 링크

접근법

(i,j)위치부터 (x,y)위치 까지의 합을 구하면 된다. 1부터 입력을 받으므로 배열을 출력할때는 -1 인덱스를 출력해야한다.

그리고 (i,j)위치부터 (x,y)위치까지 위치하는 값을 전부를 더하는게 아니라 i~x, j~y 위치까지를 더해야한다.

만약 (1,2) , (3,3)이라면 (1,2)(1,3)(2,1)(2,2)(2,3)(3,1)…(3,3) 을 전부 더하는게 아니라 (1,2)(1,3)(2,2)(2,3)(3,2)(3,3)을 더해야 한다.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int N,M,I,J,X,Y,K;

    int NM[301][301];
    int sum =0;
    scanf("%d %d",&N,&M);

    for(int i=0; i<N; i++)          //y = N
    {
        for(int j=0; j<M; j++)      //x = M NM[y][x]
        {
           scanf("%d",&NM[i][j]);
        }

    }



    scanf("%d",&K);
    int flag =0;

    for(int k=0; k<K; k++)
    {
        scanf("%d %d %d %d",&I,&J,&X,&Y);

        for(int axis_y = I; axis_y <= X; axis_y++)
        {
            
            for(int axis_x = J; axis_x<= Y; axis_x++)
            {
                sum += NM[axis_y-1][axis_x-1];
            }
            


        }
        printf("%d\n",sum);

        sum = 0;



    }



    return 0;
}

결론

입력받고 출력하는거를 구현하는거는 간단했지만 접근법에서의 문제 해석이 약간 헷갈렸다.

업데이트: