함량 100%

함지의 개발일기

알고리즘/브루트포스

[백준/브루트포스] 14500 테트로미노(Python, 파이썬)

Haamjee 2021. 5. 12. 22:02

 

www.acmicpc.net/problem/14500  

 

14500번: 테트로미노

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

www.acmicpc.net

 

 

이 문제 또한 그냥 다 해보면 된다. 

나올 수 있는 폴리오미노는 대칭과 회전을 허용하므로 총 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)