이 문제 또한 그냥 다 해보면 된다.
나올 수 있는 폴리오미노는 대칭과 회전을 허용하므로 총 19개이다.
따라서 이 19가지의 경우의 수를 모두 확인하여 가장 큰 값을 출력하면 된다.
참고로 이 문제는 정말... 집중해서 풀어야한다. 문제가 어렵다기보다는 디버깅이 매우 힘들기 때문이다.
이 문제에서는 오류를 찾는 것이 매우 힘들기 때문에 처음에 코드를 작성할 때 최대한 집중해서 작성하는 것이 좋다.
import sys
input = sys.stdin.readline
m, n = map(int, input().split())
arr = []
for _ in range(m):
a = list(map(int, input().split()))
arr.append(a)
answer = 0
for i in range(m):
for j in range(n):
# 1
if j+3 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i][j+3]
if tmp > answer:
answer = tmp
# 2
if i+3 < m:
tmp = arr[i][j] + arr[i+1][j] + arr[i+2][j] + arr[i+3][j]
if tmp > answer:
answer = tmp
# 3
if i+1 < m and j+1 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i+1][j] + arr[i+1][j+1]
if tmp > answer:
answer = tmp
# 4
if i+2 < m and j+1 < n:
tmp = arr[i][j] + arr[i+1][j] + arr[i+2][j] + arr[i+2][j+1]
if tmp > answer:
answer = tmp
# 5
if i+2 < m and j-1 >= 0:
tmp = arr[i][j] + arr[i+1][j] + arr[i+2][j] + arr[i+2][j-1]
if tmp > answer:
answer = tmp
# 6
if i+2 < m and j+1 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i+1][j] + arr[i+2][j]
if tmp > answer:
answer = tmp
# 7
if i+2 < m and j+1 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i+1][j+1] + arr[i+2][j+1]
if tmp > answer:
answer = tmp
# 8
if i+1 < m and j+2 < n:
tmp = arr[i][j] + arr[i+1][j] + arr[i+1][j+1] + arr[i+1][j+2]
if tmp > answer:
answer = tmp
# 9
if i+1 < m and j-2 >= 0:
tmp = arr[i][j] + arr[i+1][j] + arr[i+1][j-1] + arr[i+1][j-2]
if tmp > answer:
answer = tmp
# 10
if i+1 < m and j+2 < n:
tmp = arr[i][j] + arr[i+1][j] + arr[i][j+1] + arr[i][j+2]
if tmp > answer:
answer = tmp
# 11
if i+1 < m and j+2 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+2]
if tmp > answer:
answer = tmp
# 12
if i+2 < m and j+1 < n:
tmp = arr[i][j] + arr[i+1][j] + arr[i+1][j+1] + arr[i+2][j+1]
if tmp > answer:
answer = tmp
# 13
if i+2 < m and j-1 >= 0:
tmp = arr[i][j] + arr[i+1][j] + arr[i+1][j-1] + arr[i+2][j-1]
if tmp > answer:
answer = tmp
# 14
if i-1 >= 0 and j+2 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i-1][j+1] + arr[i-1][j+2]
if tmp > answer:
answer = tmp
idx=14
# 15
if i+1 < m and j+2 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i+1][j+1] + arr[i+1][j+2]
if tmp > answer:
answer = tmp
# 16
if i-1 >= 0 and j+2 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i-1][j+1]
if tmp > answer:
answer = tmp
# 17
if i+1 < m and j+2 < n:
tmp = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1]
if tmp > answer:
answer = tmp
# 18
if i+2 < m and j+1 < n:
tmp = arr[i][j] + arr[i+1][j] + arr[i+1][j+1] + arr[i+2][j]
if tmp > answer:
answer = tmp
# 19
if i+2 < m and j-1 >= 0:
tmp = arr[i][j] + arr[i+1][j] + arr[i+1][j-1] + arr[i+2][j]
if tmp > answer:
answer = tmp
print(answer)
'알고리즘 > 브루트포스' 카테고리의 다른 글
[백준/브루트포스] 15650 N과 M (2) (Python, 파이썬) (0) | 2021.05.15 |
---|---|
[백준/브루트포스] 15649 N과 M (1) (Python, 파이썬) (0) | 2021.05.15 |
[백준/브루트포스] 1107 리모컨(Python, 파이썬) (0) | 2021.05.11 |
[백준/브루트포스] 1476 날짜 계산(Python, 파이썬) (0) | 2021.05.11 |
[백준/브루트포스] 3085 사탕게임(Python, 파이썬) (1) | 2021.05.09 |