[Programmers/프로그래머스] 2020 KAKAO BLIND RECRUITMENT [코딩테스트]
- [Lv. 2] 문자열 압축
- [Lv. 2] 괄호 변환
- [Lv. 3] 자물쇠와 열쇠
- [Lv. 4] 가사 검색
- [Lv. 3] 기둥과 보 설치
- [Lv. 3] 외벽 점검
- [Lv. 3] 블록 이동하기
📌 문제

📝 제한사항

💻 입출력 예

📖 입출력 예에 대한 설명

📌 풀이
def rotate(key):
m = len(key)
rotated_key = [[0] * m for _ in range(m)]
for row in range(m):
for col in range(m):
rotated_key[row][col] = key[m - 1 - col][row]
return rotated_key
def check(lock):
n = len(lock) // 3
for row in range(n, n * 2):
for col in range(n, n * 2):
if lock[row][col] != 1:
return False
return True
def solution(key, lock):
n, m = len(lock), len(key)
extended_lock = [[0] * (n * 3) for _ in range(n * 3)]
for row in range(n):
for col in range(n):
extended_lock[row + n][col + n] = lock[row][col]
for _ in range(4):
key = rotate(key)
for row in range(1, n * 2):
for col in range(1, n * 2):
for i in range(m):
for j in range(m):
extended_lock[row + i][col + j] += key[i][j]
if check(extended_lock):
return True
for i in range(m):
for j in range(m):
extended_lock[row + i][col + j] -= key[i][j]
return False
1. 자물쇠 영역을 벗어난 부분까지 확인하기 위해, 자물쇠의 주변으로 자물쇠를 3배 크기로 확장.
(M은 항상 N이하 이므로, 인덱스 오류 없음)
2. 좌표를 이용한 배열회전:
new_row = n - 1 - old_col
new_col = old_row