[백준] 14500번 (python 파이썬) 테트로미노

2021. 3. 22. 18:10발돋움/알고리즘

728x90
반응형

 

* 각 블록별로 회전, 대칭한 모양은 19가지이다.

  그 19가지를 미리 만들어놓고 합이 더 큰것을 결과 값으로 교체하고 결과값을 출력한다.

* 기준점을 하나 정해두고 나머지 블록의 모양을 써준다.

  기준점을 정할때 기준점의 위 아래 중 한쪽으로만 블록이 있도록 해준다.

* if문 조건은 기준,부호,최대 숫자이다. (ex j + 3 < m 에서 기준 : j, 부호 : +, 최대숫자 3)

728x90
n, m = map(int, input().split())

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

result = 0
for i in range(n):
    for j in range(m):
        if j + 3 < m: # 1
            block = tet[i][j] + tet[i][j + 1] + tet[i][j + 2] + tet[i][j + 3]
            if block > result:
                result = block
                
        if i + 3 < n: # 2
            block = tet[i][j] + tet[i + 1][j] + tet[i + 2][j] + tet[i + 3][j]
            if block > result:
                result = block
                
        if (i + 1 < n) & (j + 1 < m): # 3
            block = tet[i][j] + tet[i][j + 1] + tet[i + 1][j] + tet[i + 1][j + 1]
            if block > result:
                result = block
                
        if (i + 2 < n) & (j + 1 < m): # 4
            block = tet[i][j] + tet[i + 1][j] + tet[i + 2][j] + tet[i + 2][j + 1]
            if block > result:
                result = block
                
        if (i - 2 >= 0) & (j + 1 < m): # 5
            block = tet[i][j] + tet[i][j + 1] + tet[i - 1][j + 1] + tet[i - 2][j + 1]
            if block > result:
                result = block
                
        if (i + 1 < n) & (j + 2 < m): # 6
            block = tet[i][j] + tet[i + 1][j] + tet[i + 1][j + 1] + tet[i + 1][j + 2]
            if block > result:
                result = block
                
        if (i - 1 >= 0) & (j + 2 < m): # 7
            block = tet[i][j] + tet[i][j + 1] + tet[i][j + 2] + tet[i - 1][j + 2]
            if block > result:
                result = block
                
        if (i + 1 < n) & (j + 2 < m): # 8
            block = tet[i][j] + tet[i][j + 1] + tet[i][j + 2] + tet[i + 1][j]
            if block > result:
                result = block
                
        if (i + 1 < n) & (j + 2 < m): # 9
            block = tet[i][j] + tet[i][j + 1] + tet[i][j + 2] + tet[i + 1][j + 2]
            if block > result:
                result = block
                
        if (i + 2 < n) & (j + 1 < m): # 10
            block = tet[i][j] + tet[i][j + 1] + tet[i + 1][j] + tet[i + 2][j]
            if block > result:
                result = block
                
        if (i + 2 < n) & (j + 1 < m): # 11
            block = tet[i][j] + tet[i][j + 1] + tet[i + 1][j + 1] + tet[i + 2][j + 1]
            if block > result:
                result = block
                
        if (i + 2 < n) & (j + 1 < m): # 12
            block = tet[i][j] + tet[i + 1][j] + tet[i + 1][j + 1] + tet[i + 2][j + 1]
            if block > result:
                result = block
                
        if (i - 2 >= 0) & (j + 1 < m): # 13
            block = tet[i][j] + tet[i - 1][j] + tet[i - 1][j + 1] + tet[i - 2][j + 1]
            if block > result:
                result = block
                
        if (i + 1 < n) & (j + 2 < m): # 14
            block = tet[i][j] + tet[i][j + 1] + tet[i + 1][j + 1] + tet[i + 1][j + 2]
            if block > result:
                result = block
                
        if (i - 1 >= 0) & (j + 2 < m): # 15
            block = tet[i][j] + tet[i][j + 1] + tet[i - 1][j + 1] + tet[i - 1][j + 2]
            if block > result:
                result = block
                
        if j + 2 < m: 
            block = tet[i][j] + tet[i][j + 1] + tet[i][j + 2]
            if i - 1 >= 0: # 16
                block2 = block + tet[i - 1][j + 1]
                if block2 > result:
                    result = block2
            if i + 1 < n: # 17
                block2 = block + tet[i + 1][j + 1]
                if block2 > result:
                    result = block2
                    
        if i + 2 < n: 
            block = tet[i][j] + tet[i + 1][j] + tet[i + 2][j]
            if j - 1 >= 0: # 18
                block2 = block + tet[i + 1][j - 1]
                if block2 > result:
                    result = block2
            if j + 1 < m: # 19
                block2 = block + tet[i + 1][j + 1]
                if block2 > result:
                    result = block2
                    
print(result)

코드에서 어떤 줄이 무슨 모양인지 모르겠다면 보시라
               

 

 

 

 

 

728x90
반응형