Baek_14500

원성혁·2022년 10월 11일
0

algorithm

목록 보기
10/21
post-thumbnail

오늘도 코테통과를 위해 노력중이다.
이번에는 약간 읽자마자 풀기 싫었다....
대충 이해해보니 2차원 배열에 아무데나 폴리오미노에 해당하는 블록을 놨을 때 그 구간의 합이 최대일때를 출력하는거다....
딱 봐도 완전탐색이고 구현이고 시뮬레이션이라 할수 있는 문제다...
근데 블록을 구현하는게 완전 귀찮다ㅠ

import sys
input = sys.stdin.readline

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

def tech(x,y):
    mx = 0
    global n,m
    if 0<=x+1<n and 0<=y+1<m:
        k = matrix[x][y]+matrix[x+1][y]+matrix[x][y+1]+matrix[x+1][y+1]
        mx = max(k,mx)
    if 0<=y+2<m:
        st = matrix[x][y]+matrix[x][y+1]
        if 0<=x-1<n:
            t = st + matrix[x][y+2] + matrix[x-1][y+2]
            o = st + matrix[x][y+2] + matrix[x-1][y+1]
            p = st + matrix[x-1][y+1] + matrix[x-1][y+2]
            t2 = st + matrix[x][y+2] + matrix[x-1][y]
            mx = max(t,o,p,t2,mx)
        if 0<=x+1<n:
            t = st + matrix[x][y+2] + matrix[x+1][y+2]
            o = st + matrix[x][y+2] + matrix[x+1][y+1]
            p = st + matrix[x+1][y+1] + matrix[x+1][y+2]
            t2 = st + matrix[x][y+2] + matrix[x+1][y]
            mx = max(t,o,p,t2,mx)
        if 0<=y+3<m:
            l = st+matrix[x][y+2]+matrix[x][y+3]
            mx = max(mx,l)
    if 0<=x+2<n:
        st = matrix[x][y]+matrix[x+1][y]
        if 0<=y-1<m:
            t = st + matrix[x+2][y] + matrix[x+2][y-1]
            o = st + matrix[x+2][y] + matrix[x+1][y-1]
            p = st + matrix[x+1][y-1] + matrix[x+2][y-1]
            t2 = st + matrix[x+2][y] + matrix[x][y-1]
            mx = max(t,o,p,t2,mx)
        if 0<=y+1<m:
            t = st + matrix[x+2][y] + matrix[x+2][y+1]
            o = st + matrix[x+2][y] + matrix[x+1][y+1]
            p = st + matrix[x+1][y+1] + matrix[x+2][y+1]
            t2 = st + matrix[x+2][y] + matrix[x][y+1]
            mx = max(t,o,p,t2,mx)
        if 0<=x+3<n:
            l = st+matrix[x+2][y]+matrix[x+3][y]
            mx = max(mx,l)
    return mx
max_num = 0
for i in range(n):
    for j in range(m):
        a = tech(i,j)
        max_num = max(max_num,a)
print(max_num)

일단 나름 최선으로 이렇게 해봤다..
한 칸마다 구간으로 구분을 해서 확인할 블록들을 확인하고 최댓값을 return하는 함수를 만들었고 그렇게 return한 값중 최대를 print 한다.
처음에는 틀렸었는데 L자 모형 블록을 대칭시키는거를 잊었었다.
뭔가 누가봐도 구현문제에서 내가 틀린거면 블록의 경우의수를 빼먹었겠지 생각하고 추가시켰는데 다행히 맞았다.ㅎㅎ
일단 통과해서 기분 좋다!

profile
AI개발자를 향해 전진중

0개의 댓글