Python/CoTe

[삼성기출] 테트리스 블럭 안의 합 최대화 하기 - 파이썬

joannekim0420 2024. 4. 13. 18:06
728x90

직관적으로 풀면, 

나올 수 있는 모든 블럭의 종류의 좌표값을 저장해서 해결한다. 

 

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

blocks = [[(0,1),(0,2),(0,3)],[(1,0),(2,0),(3,0)],		#연속 일자 모형
		[(0,1),(1,0),(1,1)],							#정사각형
        [(1,0),(1,1),(2,0)],[(1,0),(2,0),(1,-1)],[(0,1),(0,2),(-1,1)],[(0,1),(0,2),(1,1)],	#가운데 툭튀 형
        [(1,0),(1,1),(2,1)],[(1,0),(0,1),(-1,1)],[(0,1),(-1,1),(-1,2)],[(0,1),(1,1),(1,2)],	#계단형
        [(1,0),(2,0),(2,1)],[(0,1),(-1,1),(-2,1)],[(0,1),(1,0),(2,0)],[(0,1),(1,1),(2,1)],	#ㄱ,ㄴ 형
        [(0,1),(0,2),(-1,2)],[(1,0),(1,1),(1,2)],[(0,1),(0,2),(1,2)],[(0,1),(0,2),(1,0)]]

max_ = -100

for block in blocks:				#가능한 모든 블럭 모양에 대해
    for i in range(n):
        for j in range(m):
            tmp = arr[i][j]
            for ni, nj in block:	
                ni += i
                nj += j
                if 0<=ni<n and 0<=nj<m:		#해당 블럭의 값이 이차원 영역 안에 속할 때
                    tmp += arr[ni][nj]
                else:						#한 개라도 속하지 않으면 최대값을 구할 수 없으므로, break
                    break
            if tmp > arr[i][j]:				#현재 블럭의 합과 최대값 비교
                max_ = max(max_,tmp)
print(max_)