import sys
def rotate_90_degree(a):
n = len(a)
m = len(a[0])
result = [[0] * n for _ in range(m)]
for i in range(n):
for j in range(m):
result[j][n - 1 - i] = a[i][j]
return result
def move_success_check(a, x, y):
n = len(a)
m = len(a[0])
move_flag = True
used = []
for i in range(n):
for j in range(m):
if visited[i+x][j+y] and a[i][j] == 1:
move_flag = False
used.append((i+x, j+y, a[i][j]))
if move_flag:
for x, y, v in used:
if v == 1:
graph[x][y] = v
visited[x][y] = True
return True
return False
N, M, K = map(int, sys.stdin.readline().rstrip().split())
graph = [[0] * M for _ in range(N)]
visited = [[False] * M for _ in range(N)]
for z in range(K):
r, c = map(int, sys.stdin.readline().rstrip().split())
sticker = [list(map(int, sys.stdin.readline().rstrip().split())) for _ in range(r)]
for _ in range(4):
cases = []
flag = False
for i in range(0, N-r+1):
for j in range(0, M-c+1):
cases.append((i, j))
for x, y in cases:
if move_success_check(sticker, x, y):
flag = True
break
if flag:
break
else:
sticker = rotate_90_degree(sticker)
r, c = c, r
cnt = 0
for i in range(N):
for j in range(M):
if visited[i][j]:
cnt += 1
print(cnt)
90도 회전, 좌표 한 칸씩 움직인 후 check. 두 가지 함수를 사용했다.
자주 쓰는 함수이므로 다시 정리해봐야 겠다.