[C언어 코드업 문제풀이] CodeUp 1495 : [기초-배열연습] 2차원 차이 배열 만들기 5-4

코드업 1495번 2차원 차이 배열 만들기 5-4 문제 풀이 해답입니다.

 

1. 문제 설명

 

크기가 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

 

 

2. 입력

 

첫 번째 줄에 배열의 크기 n, m과 구간의 개수 k가 공백을 두고 입력된다.
두 번째 줄부터 k개의 데이터가 공백을 두고 입력된다.
[입력값의 정의역]
1 <= n, m <=1000
1 <= k <= 700
1 <= x1 <= x2 <= n
1 <= y1 <= y2 <= m
-1000 <= u <= 1000

 

3. 출력

 

n*m 배열의 상태를 출력한 후,
줄을 바꿔 2차원 누적합을 계산해 출력한다.

 

4. 입력 예시

 

7 7 4

1 1 2 2 1

2 2 3 3 1

3 3 4 4 1

4 4 5 5 1

 

5. 출력 예시

 

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

 

6. 문제 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "stdio.h"
 
 
int main(void)
{
    int Arr[1001][1001= {};
    int n,m,k;
    int 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;
    scanf("%d %d %d",&n,&m,&k);
    for(int i = 1; i <= k; i++){
        scanf("%d %d %d %d %d",&x1,&y1,&x2,&y2,&u);
        Arr[x1][y1] = Arr[x1][y1]+u;
        Arr[x2+1][y2+1= Arr[x2+1][y2+1]+u;
        
        Arr[x1][y2+1= Arr[x1][y2+1]-u;
        Arr[x2+1][y1] = Arr[x2+1][y1]-u;
    }
    
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            printf("%d ",Arr[i][j]);
        }
        printf("\n");
    }
    
    int sum = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            sum += Arr[i][j];
            Arr[i][j] = sum;
 
        }
        sum = 0;
        
    }
    
    sum = 0;
    for(int j = 0; j < m; j++){
        for(int i = 0; i < n; i++){
            sum += Arr[i][j];
            Arr[i][j] = sum;
        }
        sum = 0;
    }
    
    printf("\n");
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            printf("%d ",Arr[i][j]);
        }
        printf("\n");
    }
    
    
    return 0;
}
 
 

댓글()