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

HL·2021년 2월 18일
0

프로그래머스

목록 보기
14/44

문제 링크

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

문제 설명

  • N X N의 열쇠와 M x M의 자물쇠가 주어진다
  • 열쇠의 회전, 이동이 가능할 때
  • 자물쇠와 딱 맞물리는 경우가 있으면 True
  • 없으면 False 반환

풀이

  • 모든 좌표에 대해 검사
  • 각 좌표에 대해 4회 반복
    • 검사
    • 회전

코드

def solution(key, lock):
    n, m = len(key), len(lock)
    for i in range(1 - n, m):
        for j in range(1 - n, m):
            for _ in range(4):
                if possible(n, m, key, lock, i, j):
                    return True
                rotate(n, key)
    return False


def possible(n, m, key, original_lock, li, lj):
    lock = [original_lock[i][:] for i in range(m)]
    for i in range(n):
        for j in range(n):
            ki = li + i
            kj = lj + j
            if key[i][j]:
                if 0 <= ki < m and 0 <= kj < m:
                    lock[ki][kj] += 1
    for i in range(m):
        for j in range(m):
            if lock[i][j] != 1:
                return False
    return True


def rotate(n, original_key):
    key = [[0] * n for _ in range(n)]
    for i in range(n):
        for j in range(n):
            key[n-j-1][i] = original_key[i][j]
    for i in range(n):
        for j in range(n):
            original_key[i][j] = key[i][j]
profile
Swift, iOS 앱 개발을 공부하고 있습니다

0개의 댓글