Posts [프로그래머스] 자물쇠와 열쇠 Python (파이썬)
Post
Cancel

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

자물쇠와 열쇠

2020 KAKAO BLIND RECRUITMENT🤎

문제 링크 https://programmers.co.kr/learn/courses/30/lessons/60059

문제 풀이

rotate 는 2차원 배열을 회전해주는 함수이고 for r in range(4)를 보면 4번 회전할때마다 각 경우를 구하였다. 일단 lock의 배열을 key값의 length만큼 크기를 확장시켜주었다. 확장시켜주면서 확장시킨 곳은 0으로 초기화하였다. 그리고 check_lock이란 new_lock(lock의 크기를 확장한 배열) 값을 복제시켜주어 회전한 key 와 같은 인덱스 값을 check_lock자리에 더해주었다. 그리고 모든 key 배열을 순회한 뒤, lock의 실제 위치 자리를 순회하며 2 or 0일 때는 실패 그리고 check_lock을 모두 순회했을때 다 1의 값을 갖는다면 True로 반환해 주었다.

문제의 키포인트

  • lock 이차원 배열을 key length만큼 확장시키기
  • lock 이차원 배열을 deepcopy한 check_lock 이차원 배열 함수 만들기
  • check_lock의 실제 lock 부분의 인덱스를 순회하며 올바르게 껴져있는지 확인하기

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from copy import deepcopy
def rotate(key,M):
    new_key = [[0] * M for _ in range(M)]
    for i in range(M):
        for j in range(M):
            new_key[j][M-1-i] = key[i][j]
    return new_key

def solution(key, lock):
    answer = True
    m = len(key)
    n = len(lock)
    new_lock = [[0]*(2*m+n) for _ in range(2*m+n)]
    for i in range(m,m+n):
        for j in range(m,m+n):
            new_lock[i][j] = lock[i-m][j-m]

    for r in range(4):
        key = rotate(key,m)
        for i in range(len(new_lock)-m):
            for j in range(len(new_lock)-m):
                check_lock = deepcopy(new_lock)
                for a in range(m):
                    for b in range(m):
                        check_lock[a+i][b+j] += key[a][b]

                flag = 0
                for x in range(m,m+n):
                    for y in range(m,m+n):
                        if check_lock[x][y] == 2 or check_lock[x][y] == 0:
                            flag = 1
                            break 
                    if flag == 1:
                        break   
                if flag == 0:
                    return True
    return False
This post is licensed under CC BY 4.0 by the author.

[Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF)

[Database] 데이터베이스 용어 - 릴레이션, 어트리뷰트, 튜플, 도메인, 차수, 카디널리티, 스키마

Loading comments from Disqus ...