[Algorithm] 사과나무 (다이아몬드)

myeonji·2022년 1월 23일
0

Algorithm

목록 보기
12/89

현수의 농장은 N*N 격자판으로 이루어져 있으며, 각 격자안에는 한 그루의 사과나무가 심어저 있다. N의 크기는 항상 홀수이다. 가을이 되어 사과를 수확해야 하는데 현수는 격자판안의 사과를 수확할 때 다이아몬드 모양의 격자판만 수확하고 나머지 격자안의 사과는 새들을 위해서 남겨놓는다. 만약 N이 5이면 아래 그림과 같이 진한 부분의 사과를 수확한다.

한번 말리니까 계속 안 풀리던 문제..
쉬운 문제라고 하던데 안 풀리니까 더 조급했다

<내 답안>

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

for i in range(0, n):
    if i in range(0, 3):
        for j in range(n//2-i, i+3, 1):
            sum+=apple[i][j]
    else:
        for k in range(i-n//2, n-i+2, 1):
            sum+=apple[i][k]

print(sum)

내 답안은 틀렸다. 예시가 n=5였는데 이거에 집중하다보니 5에만 적용되는 코드를 짠 거 같다..ㅋㅋ j와 k의 for문 조건을 잘못하지 않았나 싶다.

<모범답안>

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)

내가 생각한 전략이 해설과 비슷하긴 하지만 내가 구현을 정확히 못하였다. 그리고 해설 코드가 훨씬 깔끔하게 짜여져 있다. 조건에서 해결하려고 하지 말고 처음부터 s, e 변수를 선언하고 풀으면 더 효율적인 코드가 될 것 같다.

0개의 댓글