알고리즘/인프런: 파이썬 알고리즘 문제풀이

탐색&시뮬레이션 문제 #7. 사과나무

bearbrick 2022. 5. 28. 02:41

*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.

 

 

 

내 풀이

 

1. 먼저 가운데 행의 합을 구한다.

2. 그 후, 가운데 행을 기준으로 위아래 행에서 양끝을 하나씩 줄여나가면서 합을 구한다.

 

import sys
#sys.stdin=open("input.txt","rt")

n=int(input())
arr=[list(map(int, input().split())) for _ in range(n)]

middle=n//2
sum=0

for i in range(n):
    sum+=arr[middle][i]

for i in range(1,middle+1):
    for j in range(i,n-i):
        sum+=arr[middle-i][j]
        sum+=arr[middle+i][j]

print(sum)

 

 

 

강사님 풀이

 

import sys
sys.stdin=open("input.txt","rt")

n=int(input())
a=[list(map(int, input().split())) for _ in range(n)]

res=0
s=e=n//2

for i in range(n):
    for j in range(s,e+1):
        res+=a[i][j]
    if i<n//2:
        s-=1
        e+=1
    else:
        s+=1
        e-=1

print(res)

 

 

 

배운 점

 

1. 배열에서 시작점과 끝점을 의미하는 포인터를 둬서 범위를 지정하는 방법도 있다.