안녕하세요 :)
https://programmers.co.kr/learn/courses/30/lessons/60059
문제의 제한사항이 크지 않아 완전탐색으로 풀 수 있었습니다.
# 90도 회전
def turn(key):
return list(map(list, zip(*key[::-1])))
# 정확히 채웠는지 확인
def check(lock_padding):
n = len(lock_padding) // 3
for i in range(n, n*2):
for j in range(n, n*2):
if lock_padding[i][j] != 1:
return False
return True
# key를 lock_padding에 집어넣기
def key_in(key, lock_padding):
n = len(lock_padding) // 3
for x in range(n*2):
for y in range(n*2):
for i in range(len(key)):
for j in range(len(key)):
lock_padding[x + i][y + j] += key[i][j]
if check(lock_padding):
return True
for i in range(len(key)):
for j in range(len(key)):
lock_padding[x + i][y + j] -= key[i][j]
return False
def solution(key, lock):
n = len(lock)
lock_padding = [[0] * (n*3) for _ in range(n*3)]
for i in range(n):
for j in range(n):
lock_padding[i + n][j + n] = lock[i][j]
for _ in range(4):
if key_in(key, lock_padding):
return True
key = turn(key)
return False