Written by
최태열
on
on
[Python][프로그래머스][Level3] 자물쇠와 열쇠
[Python][프로그래머스][Level2] 자물쇠와 열쇠
코드
def rotate(key,N):
k=[[] for _ in range(N)]
for y in range(N):
for x in range(N-1,-1,-1):
k[y].append(key[x][y])
return k
def check(key,lock):
for x in range(len(key)-len(lock)+1):
for y in range(len(key)-len(lock)+1):
flag=True
for xx in range(len(lock)):
for yy in range(len(lock)):
if key[x+xx][y+yy]+lock[xx][yy]!=1:
flag=False
break
if not flag:
break
else:
return True
else:
return False
def solution(key, lock):
new_key=[[0]*(len(key)+2*len(lock)-2) for _ in range(len(key)+2*len(lock)-2)]
for x in range(len(key)):
for y in range(len(key)):
new_key[x+len(lock)-1][y+len(lock)-1]=key[x][y]
for _ in range(4):
new_key=rotate(new_key,len(new_key))
if check(new_key,lock):
return True
else:
return False
가능한 모든 경우를 탐색하면 된다.
key는 모두 사용할 필요 없이 한쪽 끝만 사용도 가능하기 때문에 그 범위를 고려한 더 큰 새로운 key 배열을 선언한다.
그 new key 배열에서 key 배열 크기만큼 비교하면서 자물쇠와 일치하는 경우를 탐색하면 된다.
Discussion and feedback