Python/이것이 취업을 위한 코딩테스트다

[이코테]구현/10.자물쇠와 열쇠(보충필요)

정호나 2024. 10. 26. 23:20

📕 문제

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

📄 내가 생각한 풀이

 

 

💻 답안

 # 2차원 리스트 90도 회전
def rotate_a_metrix_by_90_degree(a):
#행길이 계산
    n = len(a)
#     열길이 계산
    m = len(a[0])

# 결과리스트
    result = [[0]*n for _ in range(m)]
    
    for i in range(n):
        for j in range(m):
            result[j][n-i-1] =a[i][j]
    
    return result
            
    
# 자물쇠 중간부분이 모두 1인지 확인
def check(new_lock):
    lock_length = len(new_lock)//3
    for i in range(lock_length,lock_length*2):
        for j in range(lock_length, lock_length*2):
            
            if new_lock[i][j] != 1:
                return False
            return True
        

       
def solution(key, lock):
    n = len(lock)
    m = len(key)
#     자물쇠 크기를 기존의 3배로 변환
    new_lock = [[0]*(n*3)for _ in range(n*3)]
#     새로운 자물쇠의 중앙부분에 기존의 자물쇠 넣기
    for i in range(n):
        for j in range(n):
            new_lock[i+n][j+n] = lock[i][j]
    
    for rotation in range(4):
        key = rotate_a_metrix_by_90_degree(key)
        for x in range(n*2):
            for y in range(n*2):
                for i in range(m):
                    new_lock[x+i][y+j] += key[i][j]
#                         새로운 자물쇠에 열쇠가 정확히 맞는지 검사
                if check(new_lock) == True:
                    return True
#         자물쇠에서 열쇠를 다시 빼기
                for i in range(m):
                    for j in range(m):
                        new_lock[x+i][y+j] -= key[i][j]
    return False

 

📁 참고자료

 

☺️ 새로 알게 된 지식

 

2차원 배열에서 90도 회전 코드 중요

# 2차원 리스트 90도 회전
def rotate_a_metrix_by_90_degree(a):
#행길이 계산
    n = len(a)
#     열길이 계산
    m = len(a[0])

# 결과리스트
    result = [[0]*n for _ in range(m)]
    
    for i in range(n):
        for j in range(m):
            result[j][n-i-1] =a[i][j]
    
    return result

 

😉 리뷰

런타임에러로 수행 실패함

결과값은 맞게 나옴, 더 공부할 필요 있음