[SWEA] 2805 농작물 수확하기 (C++)

우리누리·2023년 11월 16일
0

👓 문제 설명

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와 농작물의 가치가 주어질 때, 규칙에 따라 얻을 수 있는 수익은 얼마인지 구하여라.


💣 제한 사항

  • 농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)
  • 농작물의 가치는 0~5이다.

🚨 접근 방법

데이터를 모두 저장한 후
마름모 형태의 영역에 해당하지 않는
좌측상단, 우측상단, 좌측하단, 우측하단 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;
}

0개의 댓글