[Python] 프로그래머스(Lv3) - 자물쇠와 열쇠 (2020 KAKAO BLIND RECRUITMENT)

Kerri·2021년 5월 5일
0

코테

목록 보기
44/67

안녕하세요 :)
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
profile
안녕하세요 !

0개의 댓글