티스토리 뷰

코딩테스트

자물쇠와 열쇠

ajaa 2024. 11. 27. 16:44

📌문제

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

 

프로그래머스

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

programmers.co.kr

 

📌풀이

열쇠를 적당히 회전하고 이동시켜 자물쇠의 홈에 맞게 끼워 넣는 것

자물쇠의 크기의 3배인 새로운 리스트를 만들어 중앙 부분으로 옮김

자물쇠 리스트의 값에 열쇠 리스트의 값을 더한 뒤에 더한 결과가 자물쇠 부분의 모든 값이 1인지 확인

 

📌코드

#2차원 리스트 90도 회전
def rotate_a_matrix_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]
            
    #4가지 방향에 대해 확인
    for rotation in range(4):
        key=rotate_a_matrix_by_90_degree(key) #열쇠 회전
        for x in range(n*2):
            for y in range(n*2):
                #자물쇠에 열쇠를 넣기
                for i in range(m):
                    for j 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

 

📌참고

https://g.co/kgs/eyd5SSd

 

이것이 취업을 위한 코딩 테스트다 with 파이썬

IT 취준생이라면 누구나 입사하고 싶은 카카오・삼성전자・네이버・라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다! IT 취준생이라면 누구나 가고 싶어 하는 카카오, 라인, 삼성전자의 2016년

www.google.com

 

 

'코딩테스트' 카테고리의 다른 글

외벽 점검  (2) 2024.11.29
  (2) 2024.11.28
문자열 압축  (0) 2024.11.26
문자열 재정렬  (0) 2024.11.25
럭키 스트레이트  (0) 2024.11.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함