[C언어 코드업 문제풀이] CodeUp 4085 : 농사짓기 가장 좋은 땅 고르기

코드업 4085번 농사짓기 가장 좋은 땅 고르기 문제 풀이 해답입니다.

 

1. 문제 설명

 

교원이는 전체 가로 m칸, 세로 n칸 크기의 땅에서 가장 비옥한 구역을 찾아 농사를 지으려고 한다. 비옥도(k)는 각 칸에 0~99 사이의 숫자로 표시되며, 교원이가 농사를 짓기 위해 골라야 하는 땅의 크기는 가로 x칸, 세로 y칸이다. 구역 비옥도(ka)를 각 칸 의 비옥도(k)의 합으로 결정한다면, 입력받은 땅 데이터에서 교원이가 찾을 수 있는 구 역 비옥도(ka)의 최댓값을 구하는 프로그램을 작성하시오.

 

예를 들어, 전체 가로 4칸, 세로 4칸 크기의 땅의 비옥도가 그림과 같이 주어져 있을 때, 교원 이가 농사를 짓기 위해 골라야 하는 땅의 크기가 가로 2칸, 세로 2칸이라고 한다면, 구역 비옥도(ka)의 최댓값은 색칠된 영역에 해당되는 수의 합이다. (3+4+1+7=15)

 

 

2. 입력

 

1. 첫째 행에 m, n, x, y가 빈칸으로 구분되어 주어진다. (단, 3≤m≤100, 3≤n≤100, 1≤x≤m, 1≤y≤n)

2. 둘째 행부터 각 칸의 비옥도(k)가 빈칸과 줄 바꿈으로 구분되어 차례대로 한 줄씩 m×n 개만큼 주어진다.

 

3. 출력

 

가로 x칸, 세로 y칸 크기의 구역 중에서 나올 수 있는 구역 비옥도(ka)의 최댓값을 출 력한다.

 

4. 입력 예시

 

10 3 2 2

10 15 11 24 55 21 10 19 14 10

10 12 19 19 44 39 24 15 14 11

10 77 66 50 50 50 40 35 25 15

 

5. 출력 예시

 

183

 

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
#include <stdio.h>
 
 
 
int main()
{
 
    int map[101][101= {};
    
    int m,n,x,y;
    scanf("%d %d %d %d",&m,&n,&x,&y);
    
    for(int i = 1; i<=n; i++){
        for(int j = 1; j<= m; j++){
            scanf("%d ",&map[i][j]);
        }
    }
    int sum = 0;
    int temp = 0;
    for(int i = 1; i<=n-y+1; i++){
        for(int j = 1; j<= m-x+1; j++){
            
            for(int k = 0; k<y; k++){
                for(int l = 0; l<x; l++){
                    sum += map[i+k][j+l];
                }
            }
            if(sum > temp){temp = sum;}
            sum = 0;
        }
        
    }
    
    printf("%d",temp);
    return 0;
}
 
 

 

댓글()