티스토리 뷰
728x90
반응형
문제
https://programmers.co.kr/learn/courses/30/lessons/60059?language=python3
코드
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 |
댓글