ABAP DUMP ERROR 24시

사과나무 문제 본문

파이썬(Python)/알고리즘test

사과나무 문제

이운형 2021. 8. 30. 15:34
반응형

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


현수과 수확하는 사과의 총 개수를 출력하세요.
▣ 입력설명
첫 줄에 자연수 N(홀수)이 주어진다.(3<=N<=20) 
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 
이 자연수는 각 격자안에 있는 사과나무에 열린 사과의 개수이다.
각 격자안의 사과의 개수는 100을 넘지 않는다.
▣ 출력설명
수확한 사과의 총 개수를 출력합니다.
▣ 입력예제 1 
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
▣ 출력예제 1
379

 

import sys
from collections import deque


dx=[-1, 0, 1, 0]      # 9시 12시 3시 6시   방향일떄 x값 변화량
dy=[0, 1, 0, -1]      #  9시 12시 3시 6시 방향일때 y값 변화량

 

n=int(input()) # n*n 행렬 생성할꺼니까 하나 입력해


a=[list(map(int, input().split())) for _ in range(n)]   # n*n행렬 생성. 


ch=[[0]*n for _ in range(n)] # 왔던 곳은 다시 더하지 않기 위해 check 함수를 생성하자

sum=0 # 합은 0으로 변수초기화
Q=deque() # Q는  deque


ch[n//2][n//2]=1 # 가운데 부분부터 시작할꺼야 check!
sum+=a[n//2][n//2] # 가운데 부분부터 a의  행렬을 더해나갈꺼야 (+모양으로 더해나간다.)


Q.append((n//2, n//2)) #Q에  행렬의 시작점 입력

 

L=0


while True:
    if L==n//2:
        break


    size=len(Q)
    for i in range(size):
        tmp=Q.popleft()
        for j in range(4): # 중앙에서 부터 십자모양으로 확장해 나가는 코드
            x=tmp[0]+dx[j]
            y=tmp[1]+dy[j]

 

            if ch[x][y]==0: # 만약 ch에 없으면  1로 채워넣어서 중복되지 않게 만들어
                sum+=a[x][y]
                ch[x][y]=1
                Q.append((x, y)) # deque(1,2) (2, 3) (3, 2) (2,1)  형성 size = 4가 된다.
    L+=1
print(sum)

반응형
Comments