Algorithm/Simulation

[Python] SWEA 2805번 농작물 수확하기

코딩쪼앙 2023. 5. 11. 18:27

문제

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

문제 풀이

  • 마름모 형태로 덧셈을 진행해나가기 위해 먼저 길이의 중간값을 구한다.
  • 마름모의 모양은 대칭형태 이므로, 중간값까지 for문을 돌면서 현재 행의 더해줘야 하는 값들과 대칭되는 행의 값들을 같이 더해나간다.
    • 열의 값은 가운데 위치에서 for문 내 i값 만큼 빼고 더한 값을 구해 그 범위만큼 연산한다.
  • 위 연산 수행 중 중간값이 두 번 더해졌으므로, 모든 값들을 더한 값에서 가운데 행의 모든 값들을 더한 값을 빼준 후, 형식에 맞게 출력한다. 

코드

t = int(input())
for tc in range(t):
    n = int(input())
    array = [list(map(int,input())) for _ in range(n)]

    # 대칭되므로 윗부분을 중심으로 대칭되는 아랫값들 같이 더하기
    mid = n // 2
    result = 0
    for i in range(mid + 1):
        for j in range(mid - i, mid + i + 1):
            result += array[i][j] + array[n - i - 1][j]

    # 가운데 값이 한 번 더 더해졌으므로, 빼주기
    print(f'#{tc + 1}',result - sum(array[mid]))