[백준] 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
반응형
'발돋움 > 알고리즘' 카테고리의 다른 글
| [백준] 15650번 (python 파이썬) N과 M(2) (0) | 2021.03.23 |
|---|---|
| [백준] 15651번 (python 파이썬) N과M(3) (0) | 2021.03.23 |
| [백준] 2309번 (python 파이썬) 일곱난쟁이 (0) | 2021.03.19 |
| 스코페 모의테스트 (구름 레벨 사은품 교환) (0) | 2021.03.18 |
| 스코페 모의테스트(구름 레벨 근무자흑 python) (0) | 2021.03.18 |