사과농장은 N*N 격자판 이루어짐 (N의 크기는 항상 홀수)
각 격자안에는 한 그루의 사과나무
격자판안의 사과를 수확할 때 다이아몬드 모양의 격자판만 수확
수확하는 사과의 총 개수를 출력하는 프로그램 작성
만약 N이 5이면 아래 그림과 같이 진한 부분의 사과만 수확

수확하는 사과의 총 개수를 출력하는 프로그램 작성
첫 줄에 N 입력 받고 두번째 줄 부터 격자판 입력받음
입력예시)
5
10 13 10 12 15
12 39 30 23 11
11 25 50 53 15
19 27 29 37 27
19 13 30 13 19
출력예시)
379
내가 쓴 코드
import sys
sys.stdin = open("input.txt", 'rt')
N = int(input())
grid = [list(map(int, input().split())) for _ in range(N)]
apples = 0
#행 인덱스를 가리키는 포인터 rp와 열 인덱스를 가리키는 포인터 cp
rp = 0
cp = N//2
#i랑 rp랑 실질적으로는 같지만 포인터를 옮기는 느낌을 위해 따로 사용
#수확하는 칸이 늘어나는 부분 먼저 위에서 아래로 내려가며 수확
for i in range(N//2+1):
cp = N//2 - i
for _ in range(i*2+1):
apples += grid[rp][cp]
cp += 1
rp += 1
#수확하는 칸이 줄어드는 부분은 밑에서부터 위로 올라오며 수확
rp = N-1
cp = N//2
for i in range(N//2):
cp = N//2 - i
for _ in range(i*2 + 1):
apples += grid[rp][cp]
cp += 1
rp -= 1
print(apples)
모범답안
import sys
sys.stdin = open("input.txt", 'rt')
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
res = 0
start = end = n//2
for i in range(n):
for j in range(start,end+1):
res += a[i][j]
if i < n//2:
start -= 1
end += 1
else:
start += 1
end -= 1
print(res)
모범답안 보고 느낀점
1. 우와. 난 짱쉬운 문젠데 엄청 복잡하고 오래 풀었다..
뭔 포인터냐 포인터는!!!.. 아니지 인덱스를 가리키는 포인터를 생각한건 아주 잘함
특히 이건 지난 풀이들에서 느낀점이었찌 아주 잘했다 근데 행과 열을 가리키는걸 두개 만들게 아니라
행 별로 수확의 시작과 끝을 가리키는 포인터를 만들었어야했당.
2. 한계인가 왜 저 생각을 못했지
3. 느낀점이라곤 좌절밖에.. 연습을 계속 일단 해보자 뭐 늘겠지? 알고리즘 연습은
이제 시작이니까~~ 아쟈아쟈홧팅
다시 써보기
import sys
sys.stdin = open("input.txt",'rt')
N = int(input())
grid = [list(map(int, input().split())) for _ in range(N)]
apples = 0
s = e = N//2
for i in range(N):
for j in range(s,e+1):
apples += grid[i][j]
if i < N//2:
s -= 1
e += 1
else:
s += 1
e -= 1
print(apples)