로직
시작점을 옮기면서 그림을 돌려가면서 합계를 구하고, 최댓값과 비교한다.
코드
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 |