이코테 기출 문제 10.자물쇠와 열쇠

MongCheol·2022년 6월 29일
post-thumbnail

자물쇠와 열쇠

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

# Try
def solution(key, lock):
    answer = False
    
    n = len(lock)
    m = len(key)
    
    lock_x3 = [[0] * 3 * n for _ in range(3 * n)]
    for i in range(n):
        for j in range(n):
            lock_x3[n + i][n + j] = lock[i][j]
    """
    for i in range(n):
        print(lock[i])
    for i in range(3 * n):
        print(lock_x3[i])
    """
    for rotate in range(4):
        key = rotate_90(key, m)
        for x in range(n * 2):
            for y in range(n * 2):
                for i in range(m):
                    for j in range(m):
                        lock_x3[x + i][y + j] += key[i][j]
                if check(lock_x3) == True:
                    return True
                else:
                    for i in range(m):
                        for j in range(m):
                            lock_x3[x + i][y + j] -= key[i][j]
    
    return answer

def rotate_90(key, m):
    new_key = [[0]*m for _ in range(m)]
    
    for i in range(m):
        for j in range(m):
            new_key[i][j] = key[m-1-j][i]
    """
    for i in range(m):
        print(new_key[i])
    """
    return new_key

def check(lock_x3):
    n = len(lock_x3) // 3
    for i in range(n, n * 2):
        for j in range(n, n * 2):
            if lock_x3[i][j] != 1:
                return False
    return True
key = [[0, 0, 0], [1, 0, 0], [0, 1, 1]]
lock = [[1, 1, 1], [1, 1, 0], [1, 0, 1]]

print(solution(key, lock)) # True

# 열쇠가 모두 1이고 자물쇠가 모두 0일때
key = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
lock = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
print(solution(key, lock)) # True

# 자물쇠의 구멍이 열쇠보다 클때
key = [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
lock = [[0, 0, 0], [1, 1, 1], [1, 1, 1]]
print(solution(key, lock)) # False

# 열쇠가 자물쇠와 맞을수 없을때
key = [[1, 1, 0], [1, 1, 0], [0, 0, 0]]
lock = [[1, 0, 0], [0, 1, 0], [1, 1, 1]]
print(solution(key, lock)) # False

True
True
False
False

1회차 풀이 후기

한시간 정도 어떻게 풀어야하나 고민하다가
풀이 방법의 아이디어만 보고 코드 작성은 직접 해보기로했다.
이건 뭐 크기의 3배 배열을 만들어서 하는 방법으로 푸는데
혼자서는 떠올리기 매우 힘들었을것같다.
문제 풀이 방법이 정말 떠오르지 않는다면 문제풀이의 아이디어만 보고 문제를 푸는게 좋은 방법인 것 같다.
부분별로 연산을 요하는 문제에 활용할 수 있을것같다.

profile
자그마한 개미

0개의 댓글