티스토리 뷰

https://www.acmicpc.net/problem/14500

 

14500번: 테트로미노

폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변�

www.acmicpc.net

 

* Python3에서는 시간초과 / PyPy3으로 통과

import sys
N, M = map(int, sys.stdin.readline().split())
s = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]

t = [
    [[0, 1], [0, 2], [0, 3]], #type1
    [[1, 0], [2, 0], [3, 0]], 
    [[0, 1], [1, 0], [1, 1]], #type2
    [[0, 1], [0, 2], [-1, 2]], #type3
    [[1, 0], [2, 0], [2, 1]],
    [[0, 1], [0, 2], [1, 0]], 
    [[0, 1], [1, 1], [2, 1]], 
    [[1, 0], [1, 1], [1, 2]], 
    [[1, 0], [2, 0], [2, -1]],
    [[0, 1], [0, 2], [1, 2]],
    [[0, 1], [1, 0], [2, 0]],
    [[1, 0], [1, 1], [2, 1]], #type4
    [[0, 1], [1, 0], [1, -1]],
    [[0, 1], [-1, 1], [1, 0]],
    [[0, 1], [1, 1], [1, 2]], 
    [[0, 1], [0, 2], [1, 1]], #type5
    [[1, 0], [1, 1], [1, -1]], 
    [[1, 0], [2, 0], [1, 1]],
    [[1, 0], [2, 0], [1, -1]]]
    
res = 0
for i in range(N):
    for j in range(M):
        for k in range(19):
            tmp = s[i][j]
            for l in range(3):
                if (i + t[k][l][0]) <= (N-1) and (j + t[k][l][1]) <= (M-1):
                    tmp += s[i+ t[k][l][0]][j + t[k][l][1]]
                else:
                    tmp = 0
                    break
            res = max(res, tmp)
            
print(res)
공지사항
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함