https://programmers.co.kr/learn/courses/30/lessons/60059
def solution(key, lock):
n, m = len(key), len(lock)
for i in range(1 - n, m):
for j in range(1 - n, m):
for _ in range(4):
if possible(n, m, key, lock, i, j):
return True
rotate(n, key)
return False
def possible(n, m, key, original_lock, li, lj):
lock = [original_lock[i][:] for i in range(m)]
for i in range(n):
for j in range(n):
ki = li + i
kj = lj + j
if key[i][j]:
if 0 <= ki < m and 0 <= kj < m:
lock[ki][kj] += 1
for i in range(m):
for j in range(m):
if lock[i][j] != 1:
return False
return True
def rotate(n, original_key):
key = [[0] * n for _ in range(n)]
for i in range(n):
for j in range(n):
key[n-j-1][i] = original_key[i][j]
for i in range(n):
for j in range(n):
original_key[i][j] = key[i][j]