[프로그래머스] Level3, 자물쇠와 열쇠 (Python)

2021. 8. 10. 15:43·알고리즘/프로그래머스
728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/60059?language=python3 

 

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

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

programmers.co.kr

 

코드

def rotation(key):
    ret = [[0] * len(key) for _ in range(len(key))]
    for i in range(len(key)):
        for j in range(len(key)):
            ret[j][len(key) -1 -i] = key[i][j]
    return ret
        
def check(arr, key, lock):
    for i in range(len(key)-1, len(key) + len(lock)-1):
        for j in range(len(key)-1, len(key) + len(lock)-1):
            if arr[i][j] != 1:
                return False
    return True
    
def reset(key, lock):
    leng = len(key) * 2 + len(lock) - 2
    arr = [[0] * leng for _ in range(leng)]
    for a in range(len(lock)):
        for b in range(len(lock)):
            arr[a + len(key) -1][b + len(key) -1] = lock[a][b]
    return arr

def solution(key, lock):
    key_len = len(key)
    lock_len = len(lock)
    
    for i in range(key_len + lock_len -1):
        for j in range(key_len + lock_len -1):
            for k in range(4):
                arr = reset(key, lock)
                key = rotation(key)
                for x in range(key_len):
                    for y in range(key_len):
                        arr[x+i][y+j] += key[x][y]
                chk = check(arr, key, lock)
                if chk:
                    return True
    return False

key * 2 + lock -2 크기만큼에 배열을 새로만들어서 lock은 배열 가운데에 넣어놓고 key를 상하좌우 이동과 회전을 통해서 자물쇠 범위가 모두 1일때 성공하는 문제이다..

 

새로만든 배열 arr 처음부터 key길이 + lock 길이 -1 까지만 돌아주면서 (이 위치부터 key값을 넣어야함)

reset과 rotation을 동시에 진행하면서 계속 check 함수를 통해 lock 범위가 모두 1에 값인지 확인해 모두 1에 값이면 자물쇠와 열쇠가 맞는 값이므로 true를 반환한다.

반응형
저작자표시 (새창열림)

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] Level2, 수식최대화 (Python)  (0) 2021.09.10
[프로그래머스] Level2, 거리두기 확인하기 (Python)  (0) 2021.08.25
[프로그래머스] Level3, 합승 택시 요금 (Python)  (0) 2021.08.10
[프로그래머스] Level 2, 메뉴 리뉴얼 (Python)  (0) 2021.08.05
[프로그래머스] Level 1, 신규 아이디 추천 (Python)  (0) 2021.08.05
'알고리즘/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] Level2, 수식최대화 (Python)
  • [프로그래머스] Level2, 거리두기 확인하기 (Python)
  • [프로그래머스] Level3, 합승 택시 요금 (Python)
  • [프로그래머스] Level 2, 메뉴 리뉴얼 (Python)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196) N
      • study (1) N
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1) N
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    카카오코딩테스트
    SFlash
    항해마켓
    후기
    백준
    카카오인턴
    spring
    코딩테스트
    스파르타코딩클럽
    실전프로젝트
    김영한
    SpringBoot
    버그
    인프런
    해결
    정리
    java
    그리디
    알고리즘
    프로그래머스
    orm
    jpa
    항해99
    에러
    괄호
    조합
    파이썬
    미니프로젝트
    회고
    브루트포스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[프로그래머스] Level3, 자물쇠와 열쇠 (Python)
상단으로

티스토리툴바