For Programmer

SWEA 2805 파이썬 문제풀이(농작물 수확하기 ) 본문

코팅테스트/백준 문제 모음

SWEA 2805 파이썬 문제풀이(농작물 수확하기 )

유지광이 2022. 2. 10. 14:43
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB 

 

SW Expert Academy

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

swexpertacademy.com

 


 

위 문제는 규칙을 잘 살펴야 한다. 규칙을 보면 중간을 기준으로 첫번째 행 부터 ~ 중간까지는 해당 행의 인덱스 만큼 양옆으로 나가면서 더해준다.

다시 반대로 마지막 행 부터 ~ 중간 뒤까지는 (전체 길이 - 현재 행의 인덱스 + 1) 만큼 양옆으로 나가면서 더해준다.

여기서 중요한점은 해당 행의 중간 지점은 반드시 더해준다는 것이다. 이를 이용해 간단히 코드를 구현할 수 있다. 

 

# import sys

# sys.stdin = open('input.txt', 'r')

T = int(input())

for order in range(1, T + 1):

    N = int(input())
    array = [list(map(int, input())) for _ in range(N)]
    mid_idx = (N // 2)  # 중앙 인덱스를 설정해준다.
    sum_ = 0  # 합을 출력할 변수 선언

    # 행을 기준으로 0부터 ~ 절반까지 돈다.
    for i in range((N // 2) + 1):
        sum_ += array[i][mid_idx]  # 중앙값은 무조건 + 해준다.
        for j in range(1, i + 1):  # 그 후 현재 행의 인덱스 만큼 양옆으로 가면서 더해준다.
            sum_ += array[i][mid_idx - j]
            sum_ += array[i][mid_idx + j]

    # 행을 역으로 끝 부터 ~ 절반 전까지 돈다.
    for i in range(N - 1, N // 2, -1):
        sum_ += array[i][mid_idx]  # 중앙값은 무조건 + 해준다.
        for j in range(1, N - i):  # 그 후 (전체 길이 - 현재 행의 인덱스 + 1) 만큼 양옆으로 가면서 더해준다.
            sum_ += array[i][mid_idx - j]
            sum_ += array[i][mid_idx + j]

    print(f'#{order} {sum_}')
728x90
Comments