728x90
반응형

문제 : https://codeup.kr/problem.php?id=1495

 

[기초-배열연습] 2차원 차이 배열 만들기 5-4

크기가 n*m인 2차원 배열 d[][]에 대해 k개의 구간 [(x1, y1), (x2, y2)] 과 u를 입력 받아, d[x1][y1] = d[x1][y1]+u; d[x2+1][y2+1] = d[x2+1][y2+1]+u; d[x1][y2+1] = d[x1][y2+1]-u; d[x2+1][y1] = d[x2+1][y1]-u; 를 수행한 후, 누적 합을

codeup.kr

문제 설명

크기가 n*m인 2차원 배열 d[][]에 대해

k개의 구간 [(x1, y1), (x2, y2)] 과 u를 입력 받아,

d[x1][y1] = d[x1][y1]+u;
d[x2+1][y2+1] = d[x2+1][y2+1]+u;

d[x1][y2+1] = d[x1][y2+1]-u;
d[x2+1][y1] = d[x2+1][y1]-u;

를 수행한 후, 누적 합을 만들어 출력해보자.

크기가 7*7이고,

4개의 구간 데이터
1 1 2 2 1
2 2 3 3 1
3 3 4 4 1
4 4 5 5 1

가 입력되면

2차원 배열의 상태는
0 0 0 0 0 0 0
0 1 0 –1 0 0 0
0 0 1 0 –1 0 0
0 –1 0 2 0 –1 0
0 0 –1 0 2 0 -1
0 0 0 -1 0 1 0
0 0 0 0 -1 0 1

가 되며 그 누적합을 계산하면 아래와 같다.

0 0 0 0 0 0 0
0 1 1 0 0 0 0
0 1 2 1 0 0 0
0 0 1 2 1 0 0
0 0 0 1 2 1 0
0 0 0 0 1 1 0
0 0 0 0 0 0 0

 

 

[그림1] 입 출력 형식
[그림2] 입 출력 예제

 

 

# include <stdio.h>

int main()
{
	int d[1001][1001]={};
	int i,j,n,m,k,sum=0;
	int x1,x2,y1,y2,u;
	scanf("%d %d %d",&n,&m,&k);
	
	for(i = 1; i<=k; i++)
	{
		scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&u);
		d[x1][y1] = d[x1][y1]+u;
		d[x2+1][y2+1] = d[x2+1][y2+1]+u;
		d[x1][y2+1] = d[x1][y2+1]-u;
		d[x2+1][y1] = d[x2+1][y1]-u;
	}	
	
	for(i = 0; i<n; i++)
	{
		for(j = 0; j<m; j++)
		{
			printf("%d ",d[i][j]);
		}
		printf("\n");
	}
	printf("\n");
	
	for(i = 0; i<n; i++)
	{
		for(j = 0; j<m; j++)
		{
			sum +=d[i][j];
			d[i][j] = sum;
		}
		sum = 0;
	}
	
	sum = 0;
	for(i = 0; i<m; i++)
	{
		for(j = 0; j<n; j++)
		{
			sum +=d[j][i];
			d[j][i] = sum;
		}
		sum = 0;
	}
	
	for(i = 0; i<n; i++)
	{
		for(j = 0; j<m; j++)
		{
			printf("%d ",d[i][j]);
		}
		printf("\n");
	}
	
	return 0;
}

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기