co-cherry
[SWEA] 2805. 농작물 수확하기 본문
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GLXqKAWYDFAXB
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 방식
중앙 값을 기준으로 초기 → 중앙 행까지 0부터 +- 1, 2, ... 의 패턴으로 증가하는 것을 보고 다이아몬드 그리기 방식으로 접근해야겠다고 생각했다. 또, 상반부를 먼저 for 루프로 구현하고 그 후 하반부를 연결하는 방안을 생각했다.
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
arr = []
for _ in range(n):
arr.append(list(map(int, input())))
sum = 0
center = n // 2
for i in range(n//2 + 1):
sum += arr[i][center]
for j in range(1, i+1):
sum += arr[i][center - j] + arr[i][center + j]
for i in range(n//2 + 1, n):
sum += arr[i][center]
for j in range(1, n-i):
sum += arr[i][center - j] + arr[i][center + j]
print(f'#{test_case} {sum}')
center(n // 2) 를 기준으로 상반부 하반부를 구현했다.
상반부는 0부터 center까지, 하반부는 center 바로 다음 값부터 마지막까지를 구현한다.
상반부는 1개부터, 3개, 5개로 점차 증가하고 하반부는 점차 감소하는 패턴을 반영하기 위해 종료 값이 다름에도 유의하자.
다른 방식
댓글에서 맨해튼 거리를 이용하면 좋다고 해서 그 방법을 알아보았다.
맨해튼 거리는 격자에서 상하좌우로만 이동할 때의 거리이다.
이번 문제의 다이아몬드는 "중심으로부터 일정 거리 이하"인 점들을 말하는데,
이 거리를 맨해튼 거리로 측정하면 다이아몬드 모양이 나온다.
if abs(i - center) + abs(j - center) <= n//2:
따라서, 이 맨해튼 거리 공식을 이용하면 쉽게 원하는 답을 얻을 수 있다.
중앙으로부터 거리가 n//2 이하면 다이아몬드 안임을 기억하자!
T = int(input())
for test_case in range(1, T + 1):
n = int(input())
arr = []
for _ in range(n):
arr.append(list(map(int, input())))
center = n // 2
total = 0
for i in range(n):
for j in range(n):
if abs(i - center) + abs(j - center) <= center:
total += arr[i][j]
print(f'#{test_case} {total}')
+ ) enumerate 함수: 인덱스와 값을 동시에 가져오는 함수
fruits = ['사과', '바나나', '포도']
# 일반 for문
for fruit in fruits:
print(fruit)
# 사과
# 바나나
# 포도
# enumerate 사용
for i, fruit in enumerate(fruits):
print(i, fruit)
# 0 사과
# 1 바나나
# 2 포도'Python' 카테고리의 다른 글
| [SWEA] 1873. 배틀 필드 (0) | 2026.05.21 |
|---|---|
| [SWEA] 1974. 스도쿠 검증 (0) | 2026.05.20 |
| [SWEA] 1954. 달팽이 숫자 (0) | 2026.05.20 |
| [SWEA] 26502. 쉬운 삼각형 (0) | 2026.05.19 |
| [SWEA] 26504. MST 만들기 (0) | 2026.05.06 |
