[문제 링크] 👇
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
sol.1
- 중심 계산
- 농장의 중심은 로 구한다. 예를 들어, 일 때 중심은 2번째 행이다.
- 각 행에서 수확 범위 계산
- 각 행마다 수확 범위의 시작점은 중심에서 얼마나 떨어져 있는지에 따라 결정된다. 즉, 로 구할 수 있다.
- 끝점은 로 계산하여 그 범위까지 수확할 수 있다.
- 수익 계산
- 수확 가능한 범위의 농작물들을 sum 함수를 이용해 더한 후, 그 값을 누적하여 최종 수익을 계산한다.
sol.2
- start와 end로 수확할 수 있는 열의 범위를 나타낸다.
- 처음에는 중심열 하나만 수확한다. 즉, start = end = n // 2로 설정된다.
- 윗부분에서는 각 행마다 start는 줄어들고, end는 커진다. 즉, 위에서 내려올수록 수확 범위가 넓어진다는 것이다.
- 중심 이후로는 start는 증가하고, end는 줄어든다. 즉, 아래로 내려갈수록 수확 범위가 좁아진다.
- 각 행에서 수확 범위(start에서 end까지)의 농작물 값을 더하여 result에 누적한다.
Solution
sol.1
def harvest_profit(n, farm):
center = n // 2 #농장의 중심
result = 0
for i in range(n):
#행 i에서 수확 가능한 범위
start = abs(center - i) # 시작점 (중심에서 떨어진 거리만큼 시작점 이동)
end = n - start # 끝점
result += sum(farm[i][start:end]) # 해당 행의 수확 범위의 값들을 더함
return result
test_case = int(input())
for tc in range(1, test_case + 1):
n = int(input()) #농장 크기
farm = [list(map(int, input())) for _ in range(n)]
result = harvest_profit(n, farm)
print("#%d %d" %(tc, result))
sol.2
test_case = int(input())
for tc in range(1, test_case + 1):
n = int(input()) #농장 크기
farm = [list(map(int, input())) for _ in range(n)]
result = 0
start, end = n // 2, n // 2
for i in range(n):
for j in range(start, end + 1):
result += farm[i][j]
if i < n // 2: #중간 행 기준으로 위쪽 계산
start -= 1
end += 1
else: #중간 행 기준으로 아래쪽 계산
start += 1
end -= 1
print("#%d %d" %(tc, result))
👩💻 회고
어떻게 풀어야할지 막막했던 문제다. 풀이를 보면 간단해 보이지만 풀 방법이 잘 떠오르진 않는다. 다시 풀어봐야 할 문제이다.
'SWEA' 카테고리의 다른 글
[SWEA] 6692. 다솔이의 월급 상자 (Python/D3) (0) | 2024.10.24 |
---|---|
[SWEA] 11856. 반반 (Python/D3) (0) | 2024.10.24 |
[SWEA] 1215. [S/W 문제해결 기본] 3일차 - 회문1 (Python/D3) (2) | 2024.10.22 |
[SWEA] 10804. 문자열의 거울상 (Python/D3) (1) | 2024.10.22 |
[SWEA] 4751. 다솔이의 다이아몬드 장식 (Python/D3) (0) | 2024.10.22 |