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;
}
결론
입력받고 출력하는거를 구현하는거는 간단했지만 접근법에서의 문제 해석이 약간 헷갈렸다.