[programmers]자물쇠와 열쇠

코딩코딩·2022년 4월 28일
0

서로 다른 크기의 매트릭스의 서브 배열이 서로 대응하는 지 확인.
https://programmers.co.kr/learn/courses/30/lessons/60059

Tips.
1. 데이터 사이즈를 보고 완전 탐색을 할 것인지, 조금 더 생각해 볼 문제인지 확인한다.

22-05-11

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 변수가 변하는지 모르겠다.

profile
심심해서 하는 코딩..

0개의 댓글