본문 바로가기

알고리즘

[baekjoon] 14500. 테트로미노

 


로직

시작점을 옮기면서 그림을 돌려가면서 합계를 구하고, 최댓값과 비교한다.

 

코드

N, M = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(N)]

move1 =[[[0,0],[1,0],[2,0],[3,0]],  # ㅡ
     [[0,0],[0,1],[0,2],[0,3]]]

move2 = [[[0,0],[0,1],[1,0],[1,1]]] # 네모

move3 =[[[0,0],[1,0],[2,0],[2,-1]],  # ㄴ
     [[0,0],[0,-1],[1,0],[2,0]],
     [[0,0],[1,0],[2,0],[2,1]],
     [[0,0],[1,0],[2,0],[0,1]],
     [[0,0],[0,-1],[0,-2],[1,0]],
     [[0,0],[-1,0],[0,-1],[0,-2]],
     [[0,0],[-1,0],[0,1],[0,2]],
     [[0,0],[1,0],[0,1],[0,2]]]

move4 = [[[0,0],[1,0],[1,1],[2,1]], # ㄹ
      [[0,0],[0,1],[-1,1],[-1,2]],
      [[0,0],[1,0],[1,-1],[2,-1]],
      [[0,0],[0,1],[1,1],[1,2]]]

move5 = [[[0,0],[0,1],[0,2],[1,1]],  # ㅗ
      [[0,0],[0,1],[-1,1],[1,1]],
      [[0,0],[0,1],[0,2],[-1,1]],
      [[0,0],[1,0],[2,0],[1,1]]]

all_move = move1 + move2 + move3 + move4 + move5

mymax = 0
for i in range(N):
    for j in range(M):
        for move in all_move:
            result = 0
            for a, b in move:
                xi, yi = i + a, j + b

                if 0 <= xi < N and 0 <= yi < M:
                    result += board[xi][yi]
                else:
                    break
            if mymax < result:
                mymax = result

print(mymax)

 

어려웠던 점

1. 문제 자체가 어려웠던 건 아니지만,

       1) 모양들을 하나하나 다 손으로 작성할지(내 코드)

       2) 90도 돌리는 함수를 써서 코드를 작성해야하는지

   고민했지만,, 그냥 1)으로,,

 

'알고리즘' 카테고리의 다른 글

[baekjoon] 14889. 스타트와 링크  (0) 2020.08.18
[baekjoon] 13458. 시험감독  (0) 2020.08.18
[baekjoon] 14502. 연구소  (0) 2020.08.15
[programmers] 보석쇼핑  (0) 2020.08.13
[baekjoon] 3190. 뱀  (0) 2020.08.12