[SWEA] 2805_농작물 수확하기

김태민·2021년 9월 1일
1

알고리즘

목록 보기
12/77

Mingssssss

1. 문제

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이다.

[입력]

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스에는 농장의 크기 N과 농장 내 농작물의 가치가 주어진다.

[출력]

각 줄은 '#t'로 시작하고, 공백으로 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

2. 코드

import sys
sys.stdin = open('input.txt')

def harvesting():
    mid_idx = N // 2  # 중앙 값
    result = 0
    if N == 1:  #  N이 1일 경우 바로 출력
        return arr[0][0]
    else:
        for i in range(mid_idx+1):  # mid_index를 기준으로 +n/-n씩
            x = i
            while x < i + 1:
                result += sum(arr[i][mid_idx - x: mid_idx + i + 1])  # mid_idx 까지!
                x += 1
        for j in range(mid_idx + 1, N):
            y = j
            while y < j + 1:
                result += sum(arr[j][y-mid_idx: -(y - mid_idx)])  # mid_idx+1 부터 N까지!
                y += 1
    return result


T = int(input())
for tc in range(T):
    N = int(input())
    arr = [list(map(int, input())) for _ in range(N)]
    print('#{} {}'.format(tc+1, harvesting()))

3. 리뷰

다양한 풀이가 존재할 거라고 생각했다.
그 중에 가장 간단한 아이디어로 짜는 것이 코드가 제일 간결할 거라고
생각했으나,, 간단한 아이디어가 간결한 코드로 이어지지 않는다는 것을
깨달았다.. 여러가지 아이디어를 적어놓고, 가장 구체적으로 구현 가능한
코드로 작성하는 것이 최고!

profile
어제보다 성장하는 개발자

0개의 댓글