SWEA

[SWEA] 2805 : 농작물 수확하기 (Python/파이썬)

sson-coding 2025. 11. 24. 14:55

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do

문제

N X N크기의 농장이 있다.

이 농장에는 이상한 규칙이 있다.

규칙은 다음과 같다.

   ① 농장은 크기는 항상 홀수이다. (1 X 1, 3 X 3 … 49 X 49)

   ② 수확은 항상 농장의 크기에 딱 맞는 정사각형 마름모 형태로만 가능하다.

농장의 크기 N와 농작물의 가치가 주어질 때, 규칙에 따라 얻을 수 있는 수익은 얼마인지 구하여라.

[제약 사항]

농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)

농작물의 가치는 0~5이다.

image.png

입력

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

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

출력

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

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

예제

입력

1
5
14054
44250
02032
51204
52212

출력

#1 23

정답 및 풀이

t = int(input())

for tc in range(1, t+1):
    n = int(input())
    arr = [list(map(int, input().strip())) for _ in range(n)]

    mid = n // 2
    total = 0

    for i in range(n):
        start = abs(mid - i)
        end = n - start

        for j in range(start, end):
            total += arr[i][j]

    print(f'#{tc} {total}')
  1. t = int(input())
    • 테스트 케이스 개수를 입력받는다.
  2. for tc in range(1, t+1):
    • 테스트 케이스 횟수만큼 반복하며, 출력 번호는 1부터 시작한다.
  3. n = int(input())
    • 농장의 크기 n을 입력받는다. (n은 홀수이며 농장은 n×n이다.)
  4. arr = [list(map(int, input().strip())) for _ in range(n)]
    • 문자열 형태로 들어오는 각 줄을 숫자로 변환하여 2차원 리스트로 만든다.
    • 예) "140"[1, 4, 0]
  5. mid = n // 2
    • 정가운데 행(또는 열) 인덱스를 구한다.
    • 마름모의 중심 기준 계산에 사용된다.
  6. total = 0
    • 수확한 농작물의 합계 저장 변수이다.
  7. for i in range(n):
    • 각 행을 순회한다.
  8. start = abs(mid - i)
    • 현재 행에서 수확을 시작할 열 인덱스를 계산한다.
    • 중심에서 멀어질수록 시작점이 하나씩 늘어난다.
  9. end = n - start
    • 현재 행에서 수확을 끝낼 열 인덱스를 계산한다.
    • end는 포함하지 않는 범위이므로 (start ~ end-1)을 순회한다.
  10. for j in range(start, end):
    • 해당 행에서 마름모 범위에 해당하는 열만 순회한다.
  11. total += arr[i][j]
    • 마름모 범위의 값을 누적한다.
  12. print(f'#{tc} {total}')
    • 테스트 케이스 번호와 함께 총합을 출력한다.