https://programmers.co.kr/learn/courses/30/lessons/60059
def solution(key, lock):
m = len(key)
n = len(lock)
pivot_x = -m+1
pivot_y = -m+1
for _ in range(4):
for pivot_x in range(-m+1, n):
for pivot_y in range(-m+1, n):
is_sol = True
for i in range(n):
for j in range(n):
value = lock[i][j]
if pivot_x <= i and i < pivot_x + m and pivot_y <= j and j < pivot_y + m:
value += key[i - pivot_x][j - pivot_y]
if value != 1:
is_sol = False
break
if not is_sol:
break
if is_sol:
return True
key = rotate(key)
return False
def rotate(key):
m = len(key)
answer = []
for _ in range(m):
answer.append([0] * m)
for i in range(m):
for j in range(m):
answer[j][m - i - 1] = key[i][j]
return answer
머리를 싸매다가 일단 어떻게든 풀기 위해서 그림을 그려본 후 무려 5중 for문(...)을 사용해서 풀었다. M과 N이 20 이하라서 시간 초과가 뜨진 않았다. 문제의 특성상 어쩔 수 없는 것 같긴 하다.