Skip to content

Commit 8fec85c

Browse files
committed
[BOJ] 테트로미노 / 골드 4 / 80분
https://www.acmicpc.net/problem/14500
1 parent dd124de commit 8fec85c

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'''
2+
1. 완전 탐색으로 진행
3+
1.1 문제 요건에 따라 최악의 경우는
4+
500 * 500 * 5(테트로미노 종류) * 4(90도 회전 경우의 수) * 4(대칭한 후 90도 회전 경우의 수).
5+
N(1억)이 1초라고 가정한다면 2초면 충분하다고 판단.
6+
2. 테트로미노의 종류별로, 회전과 대칭의 경우의 수를 모두 고려하여 모양 리스트를 만든다.
7+
3. 이중 반복문에서 모든 칸을 순회하며 모든 모양 리스트를 검사하여 최댓값을 찾는다.
8+
9+
'''
10+
11+
N, M = map(int, input().split())
12+
13+
arr = [list(map(int, input().split())) for _ in range(N)]
14+
15+
# 가능한 모든 테트로미노 모양, 시작점을 기준으로 더해야 할 dx, dy임.
16+
shape = [[(0, 1), (0, 2), (0, 3)], [(1, 0), (2, 0), (3, 0)],
17+
[(0, 1), (1, 0), (1, 1)],
18+
[(1, 0), (1, 1), (2, 1)], [(0, -1), (1, -1), (1, -2)],
19+
[(1, 0), (1, -1), (2, -1)], [(0, 1), (1, 1), (1, 2)],
20+
[(1, 0), (2, 0), (2, 1)], [(0, 1), (0, 2), (1, 0)],
21+
[(0, 1), (1, 1), (2, 1)], [(0, 1), (0, 2), (-1, 2)],
22+
[(1, 0), (2, 0), (2, -1)], [(0, 1), (0, 2), (1, 2)],
23+
[(1, 0), (2, 0), (0, 1)], [(1, 0), (1, 1), (1, 2)],
24+
[(1, 0), (1, 1), (1, -1)], [(1, 0), (1, 1), (2, 0)],
25+
[(0, -1), (1, 0), (0, 1)], [(0, 1), (-1, 1), (1, 1)]
26+
]
27+
28+
29+
def calc(i, j, tet):
30+
sum = arr[i][j]
31+
for dx, dy in tet:
32+
newX = i + dx
33+
newY = j + dy
34+
#종이의 범위를 넘지 않았다면 종이 칸의 수 더하기
35+
if 0 <= newX < N and 0 <= newY < M:
36+
sum += arr[newX][newY]
37+
else:
38+
return 0
39+
return sum
40+
41+
42+
ans = 0
43+
for i in range(N):
44+
for j in range(M):
45+
for tet in shape:
46+
temp = calc(i, j, tet) # 현재 위치에서 가능한 모든 모양의 합 계산
47+
ans = max(temp, ans)
48+
49+
print(ans)

0 commit comments

Comments
 (0)