알고리즘/프로그래머스
[프로그래머스] Level3, 자물쇠와 열쇠 (Python)
wookcode
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를 반환한다.
반응형