[프로그래머스] 자물쇠와 열쇠 (Python)

cotato·2021년 5월 6일

https://programmers.co.kr/learn/courses/30/lessons/60059

My Solution

def solution(key, lock):    
    m = len(key)
    n = len(lock)
    
    pivot_x = -m+1
    pivot_y = -m+1
    
    for _ in range(4):
        for pivot_x in range(-m+1, n):
            for pivot_y in range(-m+1, n):
                is_sol = True
                for i in range(n):
                    for j in range(n):
                        value = lock[i][j]
                        if pivot_x <= i and i < pivot_x + m and pivot_y <= j and j < pivot_y + m:
                            value += key[i - pivot_x][j - pivot_y]
                        if value != 1:
                            is_sol = False
                            break
                    if not is_sol:
                        break
                if is_sol:
                    return True
        key = rotate(key)
    return False

def rotate(key):
    m = len(key)
    answer = []
    
    for _ in range(m):
        answer.append([0] * m)
    for i in range(m):
        for j in range(m):
            answer[j][m - i - 1] = key[i][j]
    
    return answer

머리를 싸매다가 일단 어떻게든 풀기 위해서 그림을 그려본 후 무려 5중 for문(...)을 사용해서 풀었다. M과 N이 20 이하라서 시간 초과가 뜨진 않았다. 문제의 특성상 어쩔 수 없는 것 같긴 하다.

profile
coding_potato

0개의 댓글