본문 바로가기

PS/프로그래머스

[프로그래머스 LV 3] 자물쇠와 열쇠 (파이썬/python)

728x90

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

 

코딩테스트 연습 - 자물쇠와 열쇠

[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true

programmers.co.kr

 

마땅히 아이디어가 안 떠올라서 다른분의 아이디어를 참고했다.

 

https://johnyejin.tistory.com/127

 

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

문제출처 - https://programmers.co.kr/learn/courses/30/lessons/60059 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이

johnyejin.tistory.com

 

 

이분의 아이디어를 보고 코드를 짰다.

 

확장된 배열 가운데에 키 배열을 넣어주고

자물쇠를 요리조리 완전탐색하며 열리는지확인해주었다.

 

 

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
38
39
40
41
42
43
44
45
46
47
48
49
50
def check(key, lock, m, n):
    expand_list = [[0 for j in range((n - 1* 2 + m)] for i in range((n - 1* 2 + m)]
    # expand_list 가운데에 key를 박아준다
    x = 0
    y = 0
    for i in range(n - 1, n - 1 + m):
        for j in range(n - 1, n - 1 + m):
            expand_list[i][j] = key[x][y]
            y += 1
            if y == m:
                y = 0
                x += 1
 
    for i in range(len(expand_list) - n + 1):
        for j in range(len(expand_list) - n + 1):
            result = True
            for a in range(n):
                for b in range(n):
                    if lock[a][b] + expand_list[i + a][j + b] == 0 or lock[a][b] + expand_list[i + a][j + b] == 2:
                        result = False
                    if result == False:
                        break
                if result == False:
                    break
            if result:
                return True
 
    return False
 
 
# 오른쪽으로 90도 돌려주는 함수
def rollin(arr, m):
    li = [[arr[i][j] for i in range(m - 1-1-1)] for j in range(m)]
    return li
 
 
def solution(key, lock):
    answer = False
    m = len(key)
    n = len(lock)
 
    for i in range(4):
        result = check(key, lock, m, n)
 
        if result:
            answer = True
            break
        key = rollin(key, m)
 
    return answer
cs
728x90