알고리즘
[baekjoon] 14500. 테트로미노
78이
2020. 8. 16. 14:29
로직
시작점을 옮기면서 그림을 돌려가면서 합계를 구하고, 최댓값과 비교한다.
코드
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)으로,,