풀이
총 19가지 경우의 수를 가진 테트리스블록 모양의 좌표를 tet 라는 배열에 저장한다.
주어진 배열에서 각 좌표마다 19가지 테트리스블록의 합을 구하고 최댓값도 수정해준다.
IndexError 가 발생할 수 있으므로 예외처리를 통해 테트리스블록이 배열을 초과할 경우 continue 한다.
소스코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
paper = [list(map(int, input().split())) for _ in range(N)]
tet = [
[(0, 0), (0, 1), (0, 2), (0, 3)], # 1자블록
[(0, 0), (1, 0), (2, 0), (3, 0)], # 1자블록
[(0, 0), (0, 1), (1, 0), (1, 1)], # 네모블록
[(0, 0), (0, 1), (0, 2), (1, 0)], # L자블록
[(0, 2), (1, 0), (1, 1), (1, 2)], # L자블록
[(0, 0), (1, 0), (1, 1), (1, 2)], # L자블록
[(0, 0), (0, 1), (0, 2), (1, 2)], # L자블록
[(0, 0), (1, 0), (2, 0), (2, 1)], # L자블록
[(0, 1), (1, 1), (2, 1), (2, 0)], # L자블록
[(0, 0), (0, 1), (1, 0), (2, 0)], # L자블록
[(0, 0), (0, 1), (1, 1), (2, 1)], # L자블록
[(0, 1), (1, 0), (1, 1), (2, 0)], # 계단블록
[(0, 0), (1, 0), (1, 1), (2, 1)], # 계단블록
[(0, 1), (0, 2), (1, 0), (1, 1)], # 계단블록
[(0, 0), (0, 1), (1, 1), (1, 2)], # 계단블록
[(0, 0), (0, 1), (0, 2), (1, 1)], # T자블록
[(0, 1), (1, 0), (1, 1), (1, 2)], # T자블록
[(0, 0), (1, 0), (1, 1), (2, 0)], # T자블록
[(0, 1), (1, 0), (1, 1), (2, 1)], # T자블록
]
def sol(x, y):
global answer
for i in range(19):
result = 0
for j in range(4):
try:
nx = x + tet[i][j][0]
ny = y + tet[i][j][1]
result += paper[nx][ny]
except IndexError:
continue
answer = max(answer, result)
answer = 0
for i in range(N):
for j in range(M):
sol(i, j)
print(answer)