Q10. 자물쇠와 열쇠 : 다시풀기
코딩테스트 연습 - 자물쇠와 열쇠 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - 자물쇠와 열쇠
[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true
programmers.co.kr
곧 2시에 롤약속이 있어서 최대한 빠르게 코딩했고 25분컷을 냈다.
이미 풀어본 문제라 확실히 첨풀때보다 쉽다
import copy
def rotate(key):
K = len(key)
rotated = [[0] * K for _ in range(K)]
for i in range(K):
for j in range(K):
rotated[j][K - i - 1] = key[i][j]
return rotated
def check(lock, key, x, y):
lock = copy.deepcopy(lock)
K = len(key)
for i in range(K):
for j in range(K):
lock[x + i][y + j] += key[i][j]
L = len(lock)
for i in range(K, L - K):
for j in range(K, L - K):
if lock[i][j] != 1:
return False
return True
def solution(key, lock):
K = len(key)
L = len(lock)
keys = []
for i in range(4):
keys.append(key)
key = rotate(key)
newlock = [[0] * (2 * K + L) for _ in range(2 * K + L)]
for i in range(L):
for j in range(L):
newlock[i + K][j + K] = lock[i][j]
lock = newlock
for i in range(1, K + L):
for j in range(1, K + L):
for key in keys:
if check(lock, key, i, j):
return True
return False
참고로 이문제는 정답률 7%정도였다.