
1. N X N크기의 농장이 있다.(N은 모두 홀수)
2. 이 농장은 오직 마름모 영역의 농작물만 수확할 수 있다.
N이 주어졌을 때, 수확할 수 있는 농작물의 합계를 구하는 문제다.
T = int(input()) # 테스트 케이스의 개수
for test_case in range(1, T+1):
N = int(input()) # 농장의 크기 N
farm = [] # 농작물
for _ in range(N):
farm.append([int(i) for i in input().strip()]) # 숫자로 바꿔서 배열에 저장
half = N//2 # 마름모 중간
money = 0 # 농작물 합
for i in range(N):
diff = half - i # 반복 변수
if (diff > 0):
money += sum(farm[i][diff:-diff]) # 마름모 윗부분 삼각형
elif (diff < 0):
money += sum(farm[i][-diff:diff]) # 마름모 아래 역삼각형
else:
money += sum(farm[i]) # 마름모 중간
print('#%d %d' %(test_case, money))
[문제풀이]
간단히 말하면 마름모 영역 안의 값을 구하는 문제!

마름모는 대칭이고, 파이썬에선 음수 인덱스란 기능이 있다.
half 즉 중간값에서 현재 i를 빼면 2, 1, 0, -1, -2로 시작 위치가 정해진다.
farm[i][diff:-diff] # 마름모 윗부분 삼각형
그리고 diff부터 -diff 하면 diff부터 리스트 끝에서 diff 요소까지 뽑을 수 있다.
n = [1, 2, 3, 4, 5]
예) n[1:-1] -> n[1]는 2, n[-2]는 -5
리스트 슬라이싱은 매번 끝 인덱스-1번째까지 뽑으므로 [2, 3, 4]가 뽑힌다.
이때, half-i가 음수가 되면 역으로 되서 뽑을 수 없으므로 diff, -diff 위치를 바꿔주고. 마름모 중간의 경우 0번부터 -0번 인덱스는 모두 다 뽑혀 나오는게 아니라 아무것도 뽑혀 나오지 않게 되므로 따로 뽑아준다.
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1860. 진기의 최고급 붕어빵 (2) | 2024.10.15 |
|---|---|
| [Python, 파이썬] SWEA 1289. 원재의 메모리 복구하기 (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 2806. N-Queen (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 2001. 파리 퇴치 (0) | 2024.10.15 |