파이썬, SWEA 2805, 농작물 수확하기
알고리즘/SWEA2022. 9. 11. 15:28
난이도 : D3
링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB
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. 문제리뷰
for문 처음 접할 때 했던 별찍기가 생각나는 문제였다.
1. 전체 농작물의 합을 구한다.
2. 크기가1보다 큰 경우에는 각 모서리 부분의 합을 구하여 빼준다.
3. 소스코드
t = int(input())
for tc in range(1, t+1):
n = int(input())
arr = [list(input()) for _ in range(n)]
profit = 0
for i in range(n):
for j in range(n):
profit += int(arr[i][j])
if n > 1:
# 상단
for i in range(n // 2 + 1):
# 왼쪽
for j in range(0, n // 2 - i):
profit -= int(arr[i][j])
# 오른쪽
for j in range(n // 2 + 1 + i, n):
profit -= int(arr[i][j])
# 하단
temp = 1
for i in range(n // 2 + 1, n):
# 왼쪽
for j in range(temp):
profit -= int(arr[i][j])
# 오른쪽
for j in range(n-1, n-1-temp, -1):
profit -= int(arr[i][j])
temp += 1
print(f'#{tc} {profit}')
'알고리즘 > SWEA' 카테고리의 다른 글
파이썬, SWEA 1231, 중위 순회 (0) | 2022.09.14 |
---|
댓글()