2805. 농작물 수확하기

SW 업무 관련/SW Expert Academy

2805. 농작물 수확하기

WillBe_ 2018. 7. 19. 23:41


문제가 단순한데...생각보다 정답률이 낮은 문제이다.


이유는 모르겄다!!!


풀이 방법은 오랜만에 그림을 첨부하여 설명하겠다!


규칙 1. 길이/2는 한 변의 가운데이다.

규칙 2. 가운데를 기준으로 x축으로 -1씩 당겨지며 한 행에서 더해지는 배열 한 칸의 개수는 +2씩 증가한다.


위의 두 가지 규칙으로 상층부와 하층부를 더하며 가운데는 따로 더해주었다! 숫자는 맨위 맨 아래 가운데를 기준으로 1이며, 다음 덧셈 시작 위치의 순서이다!!


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
#include <stdio.h>
#include <string.h>
 
int arr[51][51];
 
int main()
{
    int T;
    scanf("%d"&T);
 
    for (int i = 0; i < T; i++)
    {
        int len, total = 0;
        memset(arr, 0sizeof(arr));
        scanf("%d"&len);
        for (int a = 0; a < len; a++)
        {
            for (int b = 0; b < len; b++)
            {
                scanf("%1d"&arr[a][b]);
            }
        }
 
 
        int k = 1;
        for (int a = 0; a < len / 2; a++)
        {
            for (int b = 0; b < k; b++)
            {
                total += arr[a][len / 2 - a + b];
                total += arr[len - 1 - a][len / 2 - a + b];
            }
            k += 2;
            total += (arr[len / 2][a] + arr[len / 2][len -1 - a]);
        }
 
        printf("#%d %d\n", i + 1, total + arr[len / 2][len / 2]);
    }
    return 0;
}
cs