풀이 총 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) References BOJ 14500 - 테트로미노