- 총 19가지의 테트로미노가 나옴
- board에서 모든 칸을 순회하면서 19가지의 테트로미노의 경우를 모두 고려하여 최댓값을 구함 (brute force/ 500 500 19)
tmp = list(map(int, input().split(' ')))
N = tmp[0]; M = tmp[1]
board = []
for _ in range(N):
board.append(list(map(int, input().split(' '))))
dshape = [
[(0, 0), (0, 1), (0, 2), (0, 3)],
[(0, 0), (1, 0), (2, 0), (3, 0)],
[(0, 0), (0, 1), (1, 0), (1, 1)],
[(0, 0), (1, 0), (2, 0), (2, 1)],
[(0, 0), (1, 0), (0, 1), (0, 2)],
[(0, 0), (0, 1), (1, 1), (2, 1)],
[(1, 0), (1, 1), (1, 2), (0, 2)],
[(2, 0), (2, 1), (1, 1), (0, 1)],
[(0, 0), (1, 0), (1, 1), (1, 2)],
[(0, 0), (1, 0), (2, 0), (0, 1)],
[(0, 0), (0, 1), (0, 2), (1, 2)],
[(0, 0), (1, 0), (1, 1), (2, 1)],
[(1, 0), (1, 1), (0, 1), (0, 2)],
[(1, 0), (2, 0), (1, 1), (0, 1)],
[(0, 0), (0, 1), (1, 1), (1, 2)],
[(0, 0), (0, 1), (0, 2), (1, 1)],
[(1, 0), (0, 1), (1, 1), (2, 1)],
[(1, 0), (0, 1), (1, 1), (1, 2)],
[(0, 0), (1, 0), (1, 1), (2, 0)],
]
def tetris(i, j):
global result
for x in range(19):
local_result = 0
for y in range(4):
nx = i + dshape[x][y][0]; ny = j + dshape[x][y][1]
if nx < 0 or nx >= N or ny < 0 or ny >= M:
break
local_result += board[nx][ny]
result = max(result, local_result)
result = 0
for i in range(N):
for j in range(M):
tetris(i, j)
print(result)
- dshape 다차원 list를 정의하여 19가지의 테트로미노의 dx, dy를 저장함
- 2중 for문을 돌며 모든 좌표에서 tetris(i, j)를 호출함
- tetris(i, j)
-> (i, j) 위치에서 dshape의 모든 dx, dy만큼 탐색하며 테트로미노가 놓인 칸에 쓰인 수들의 합을 구함