[SW Expert Academy] 15002 . 농작물 수확하기

sun1·2023년 3월 4일
0

im_test

목록 보기
17/22
post-thumbnail

문제

SWEA 15002 . 농작물 수확하기
https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYYSRkW6cRoDFAVw&contestProbId=AYKfMbpq_KEDFAVG&probBoxId=AYaPtr1K-_0DFARM+&type=USER&problemBoxTitle=230303%3A+%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4_5&problemBoxCnt=6

풀이

조건

  • N X N크기의 농장이 있으며 농장의 크기 N은 1 이상 49 이하의 홀수이다. (1 ≤ N ≤ 49)
  • 농작물의 가치는 0~5이다.
  • 농장의 규칙에 따라 얻을 수 있는 수익을 출력한다.

풀이 순서

  • T, N, 배열을 입력값으로 받는다.
  • N은 항상 홀수 이므로 중앙점은 (N//2, N//2) 이다.
  • 칠해지는 영역은 중앙점에서 거리가 N//2 이하라는 규칙이 있으므로 해당하는 모든 점의 수익을 더한다.

코드

Python

  • 거리를 기준으로 한 경우
T = int(input())
for tc in range(1, T + 1):
    N = int(input())
    arr = [list(map(int, input())) for _ in range(N)]

    s = N // 2  # 중점
    total = 0
    for i in range(N):
        for j in range(N):
            if abs(i - s) + abs(j - s) <= s:  # 거리가 N//2 이하인 모든 점의 수익 더하기
                total += arr[i][j]

    print(f'#{tc} {total}')

다른 방법

  • 한줄씩 기준으로 한 경우 (<- x)
T = int(input())
for tc in range(1, T + 1):
    N = int(input())
    arr = []
    for _ in range(N):
        arr.append(input())
    total = 0
    x = N // 2  # 가로의 중점
    y = N  # 세로로 칠해야하는 최대 인덱스
    z = 0  # 세로로 칠해야하는 최소 인덱스
    while x >= 0:  
        for i in range(z, y):  
            if x != N // 2: 
                total += int(arr[i][x])  # 중앙줄보다 왼쪽 줄 수익 더하기
                total += int(arr[i][N - 1 - x])  # 중앙줄보다 오른쪽 줄 수익 더하기
            else:  # 중앙줄인 경우
                total += int(arr[i][x])
        x -= 1   # 가로를 한줄 이동
        z += 1	 # 세로 칸 아래 하나 줄이기 
        y -= 1	 # 세로 칸 위 하나 줄이기
    print(f'#{tc} {total}')

0개의 댓글