문제
https://www.acmicpc.net/problem/14500
걸린 시간
02 : 04 : 10
풀이
Python3
import sys
input = sys.stdin.readline
def solve():
m = 0
for t in tetromino:
xs, ys = t
for i in range(0, len(xs)):
dx, dy = xs[i], ys[i]
for r in range(0, N):
for c in range(0, M):
acc = 0
for j in range(0, 4):
nx = r + dx[j]
ny = c + dy[j]
if 0 <= nx < N and 0 <= ny < M:
acc += paper[nx][ny]
if m <= acc:
m = acc
return m
if __name__ == "__main__":
# N : 세로, M : 가로
N, M = map(int, input().split())
paper = [list(map(int, input().split())) for _ in range(0, N)]
# x : 행, y : 열
lx = [[0, 0, 0, 0], [0, 1, 2, 3]]
ly = [[0, 1, 2, 3], [0, 0, 0, 0]]
l = [lx, ly]
ox = [[0, 0, 1, 1]]
oy = [[0, 1, 0, 1]]
o = [ox, oy]
bx = [[0, 1, 2, 2], [0, 0, 0, 1], [0, 0, 1, 2], [0, 1, 1, 1]]
by = [[0, 0, 0, 1], [0, 1, 2, 0], [0, 1, 1, 1], [2, 0, 1, 2]]
b = [bx, by]
dx = [[0, 1, 2, 2], [0, 0, 0, 1], [0, 0, 1, 2], [0, 1, 1, 1]]
dy = [[1, 1, 0, 1], [0, 1, 2, 2], [0, 1, 0, 0], [0, 0, 1, 2]]
d = [dx, dy]
sx = [[0, 0, 1, 1], [0, 1, 1, 2]]
sy = [[1, 2, 0, 1], [0, 0, 1, 1]]
s = [sx, sy]
zx = [[0, 0, 1, 1], [0, 1, 1, 2]]
zy = [[0, 1, 1, 2], [1, 0, 1, 0]]
z = [zx, zy]
Tx = [[0, 1, 1, 2], [0, 0, 0, 1], [0, 1, 1, 2], [0, 1, 1, 1]]
Ty = [[0, 0, 1, 0], [0, 1, 2, 1], [1, 0, 1, 1], [1, 0, 1, 2]]
T = [Tx, Ty]
tetromino = [l, o, b, d, s, z, T]
print(solve())
회전, 대칭시킨 테트로미노의 모든 모양을 종이 위에 올려보고 최대값을 찾는 브루트 포스 문제이다.
두 가지 모양 좌표를 나타내는데 실수가 있어 채점 중간에 틀렸습니다가 몇 번 출력됐다.
하드코딩이 아닌 dfs 로도 풀이할 수 있다고 한다.
'Baekjoon' 카테고리의 다른 글
| Baekjoon 16236번 아기 상어 (0) | 2020.08.13 |
|---|---|
| Baekjoon 15686번 치킨 배달 (0) | 2020.08.13 |
| Baekjoon 10026번 적록색약 (0) | 2020.08.12 |
| Baekjoon 1107번 리모컨 (0) | 2020.08.11 |
| Baekjoon 7662번 이중 우선순위 큐 (0) | 2020.08.10 |
댓글