알고리즘/문제
[구현] 프로그래머스 자물쇠와 열쇠
_Min
2021. 5. 1. 19:32
문제링크 programmers.co.kr/learn/courses/30/lessons/60059
[답코드]
import copy
def rotate(key):
copy_key=copy.deepcopy(key)
for i in range(len(key)):
for j in range(len(key)):
copy_key[j][-i-1]=key[i][j]
return copy_key
def check(n, m, copy_lock):
for i in range(m, n+m):
for j in range(m, n+m):
if copy_lock[i][j]!=1:
return False
return True
def add(i, j, copy_lock, key):
for k in range(len(key)):
for l in range(len(key)):
copy_lock[i+k][j+l]+=key[k][l]
return copy_lock
def solution(key, lock):
n, m=len(lock), len(key)
lock=[[0]*n]*m+lock
lock=lock+[[0]*n]*m
for i in range(len(lock)):
lock[i]=[0]*m+lock[i]
lock[i]=lock[i]+[0]*m
for _ in range(4):
for i in range(n+m):
for j in range(n+m):
copy_lock=copy.deepcopy(lock)
copy_lock=add(i, j, copy_lock, key)
if check(n, m, copy_lock):
return True
key=rotate(key)
return False
[풀이법]
[[0]*n]*m 를 작성할 때 n은 열로, m은 행으로 생각하고 작성했다.
테스트 케이스 15번만 틀렸는데 키값이 [[1]] 자물쇠값이 [[0]] 일 때를 시도해보면 대부분 고칠 수 있을 것 같다
열쇠의 돌기 부분과 자물쇠의 돌기가 만나선 안 되기 때문에 check 함수를 수행할 때 copy_lock이 0인 부분 & 2인 부분이 모두 있으면 안 된다
728x90