유형 분석 및 구현
이 문제는 복잡하니 천천히 구현해야 한다.
1. 맵 넓히기
2. 자물쇠 설치
3. 키 하나하나 이동하며 설치
- 실패시 : 키 삭제 후 키 로테이션
- 성공시 : 종료
간단하지만 이걸 구현하는데, 맵을 만들고 키를 만들고 크기 구하고 설정할게 많다.
따라서 천천히 구현할 필요가 있다.
# 키 로테이션
def rotation(array):
x_length = len(array)
y_length = len(array[0])
new_array = [[0]*x_length for i in range(y_length)]
for i in range(x_length):
for j in range(y_length):
new_array[j][x_length-i-1] = array[i][j]
return new_array
# 키 설치 확인
def check(new_lcok):
lock_length = len(new_lcok)//3
for x in range(lock_length, lock_length*2):
for y in range(lock_length, lock_length*2):
if new_lcok[x][y] != 1:
return False
return True
def solution(key, lock):
m = len(key)
n = len(lock)
# 새로운 맵
new_lock = [[0]*(n*3) for _ in range(len(lock[0]))]
# 키 설치
for i in range(n):
for j in range(n):
new_lock[i+n][j+n] = lock[i][j]
# 로테이션하며 확인
for change in range(4):
key = rotation(key)
for x in range(n*2):
for y in range(n*2):
for i in range(m):
for j in range(m):
new_lock[x+i][y+j] += key[i][j]
if check(new_lock) == True:
return True
for i in range(m):
for j in range(m):
new_lock[x+i][y+i] -= key[i][j]
return False