Algorithm (PS)

[day1] 자물쇠와 열쇠

minjiwoo 2024. 5. 20. 05:28
728x90

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

def rotate(arr):
    m = len(arr)
    result = [[0] * m for _ in range(m)] # 회전 결과 담기 
    
    for i in range(m):
        for j in range(m):
            result[j][m - i -1] = arr[i][j]
    
    return result 

def check(n, arr):
    for i in range(n, n*2):
        for j in range(n, n*2):
            if arr[i][j] != 1:
                return False 
    return True 

def solution(key, lock):
    n, m = len(lock), len(key)
    extended_lock = [[0] * (n * 3) for _ in range(n*3)] # 3 배로 확장시키기 
    
    for i in range(n):
        for j in range(n):
            extended_lock[i+n][j+n] = lock[i][j]
    
    for _ in range(4): #4 가지 방향으로 회전하기 
        key = rotate(key)
        for x in range(n*2):
            for y in range(n*2):
                
                for kx in range(m):
                    for ky in range(m):
                        extended_lock[x+kx][y+ky] += key[kx][ky]
                
                # check 
                if check(n, extended_lock): # true 
                    return True 
                
                for kx in range(m):
                    for ky in range(m):
                        extended_lock[x+kx][y+ky] -= key[kx][ky]
    
    return False
728x90