서로 다른 크기의 매트릭스의 서브 배열이 서로 대응하는 지 확인.
https://programmers.co.kr/learn/courses/30/lessons/60059
Tips.
1. 데이터 사이즈를 보고 완전 탐색을 할 것인지, 조금 더 생각해 볼 문제인지 확인한다.
def rotate(key):
rot_key, m = [],len(key)
for i in range(m):
rot_key.append([0]*m)
for i in range(m): #x axis
for j in range(m): #y axis
rot_key[j][m-i-1] = key[i][j]
return rot_key
def attach(board,key,i,j,M):
for m1 in range(M):
for m2 in range(M):
board[j+m1][i+m2] += key[m1][m2]
def dettach(board,key,i,j,M):
for m1 in range(M):
for m2 in range(M):
board[j+m1][i+m2] -= key[m1][m2]
def open_check(board,key,N,M):
for i in range(N):
for m in range(N):
if board[M-1+i][M-1+m] != 1:
return False
return True
def solution(key, lock):
N,M = len(lock), len(key)
# N+2M-2 by N+2M-2 matrix
board = []
for i in range(N+2*M-2):
board.append([0]*(N+2*M-2))
#locate lock in the middle of board
for i in range(N):
for j in range(N):
board[M-1+i][M-1+j] = lock[i][j]
for _ in range(4): #rotate key
key = rotate(key)
print("rotate")
wrong_pad = []
for i in range(N+M-1): # move in x-axis
for j in range(N+M-1): # move in y-axis
attach(board,key,i,j,M)
if open_check(board,key,N=N,M=M):
return True
dettach(board,key,i,j,M)
return False
왜 attach 함수 실행만으로 board 변수가 변하는지 모르겠다.