N X N크기의 농장이 있다.
이 농장에는 이상한 규칙이 있다.
규칙은 다음과 같다.
① 농장은 크기는 항상 홀수이다. (1 X 1, 3 X 3 … 49 X 49)
② 수확은 항상 농장의 크기에 딱 맞는 정사각형 마름모 형태로만 가능하다.
1 X 1크기의 농장에서 자라는 농작물을 수확하여 얻을 수 있는 수익은 3이다.
3 X 3크기의 농장에서 자라는 농작물을 수확하여 얻을 수 있는 수익은 16 (3 + 2 + 5 + 4 + 2)이다.
5 X 5크기의 농장에서 자라는 농작물의 수확하여 얻을 수 있는 수익은 25 (3 + 2 + 1 + 1 + 2 + 5 + 1 + 1 + 3 + 3 + 2 + 1)이다.
농장의 크기 N와 농작물의 가치가 주어질 때, 규칙에 따라 얻을 수 있는 수익은 얼마인지 구하여라.
데이터를 모두 저장한 후
마름모 형태의 영역에 해당하지 않는
좌측상단, 우측상단, 좌측하단, 우측하단 4가지 영역에 대해서
식을 구해보았다.
좌표 x,y의 인덱스 합 또는 차가 n/2보다 작거나 큰 경우로 나누면 총 4가지의 영역을 구할 수 있다.
#include<iostream>
using namespace std;
int main(int argc, char** argv)
{
int test_case;
int T,n;
cin >> T;
for (test_case = 1; test_case <= T; ++test_case)
{
int arr[50][50] = { 0, };
int answer = 0;
cin >> n;
string s;
for (int i = 0; i < n; i++) {
cin >> s;
for (int j = 0; j < n; j++) {
arr[i][j] = s[j] - '0';
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if ((i < n / 2 && j < n / 2 && (i + j) < n / 2) ||
(i < n / 2 && j > n / 2 && (j - i) > n / 2) ||
(i > n / 2 && j < n / 2 && (i - j) > n / 2) ||
(i > n / 2 && j > n / 2 &&(i + j) >= n + n / 2)) continue;
answer += arr[i][j];
}
}
cout << "#" << test_case << " " << answer << "\n";
}
return 0;
}