문제: https://programmers.co.kr/learn/courses/30/lessons/60059?
코딩테스트 연습 - 자물쇠와 열쇠
[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true
programmers.co.kr
어려웠던 문제다. 어떻게 시작해야할지 감도 안 잡혔던 문제.
찾아보니 lock보다 3배 큰 행렬을 만들고, 그 중간에 lock 행렬을 넣고 주변에서 key를 움직이면서 값을 더한후 중간 lock행렬의 값이 모두 1일 때 True를 반환하는 방식이었다
코딩테스트 준비는 정말 쉽지 않은 것 같다
-정답풀이
def rotate_a_matrix_by_90_degree(a):
n=len(a)
m=len(a[0])
result=[[0]*n for _ in range(m)]
for i in range(n):
for j in range(n):
result[j][n-(i+1)]=a[i][j]
return result
def check(new_lock):
lock_length=len(new_lock)//3
for i in range(lock_length,2*lock_length):
for j in range(lock_length,2*lock_length):
if new_lock[i][j]!=1:
return False
return True
def solution(key,lock):
n=len(lock)
m=len(key)
new_lock=[[0]*3*n for _ in range(3*n)]
for i in range(n,2*n):
for j in range(n,2*n):
new_lock[i][j]=lock[i][j]
for rotation in range(4):
key=rotate_a_matrix_90_degree(key)
for x in range(2*n):
for y in range(2*n):
#자물쇠에 열쇠 끼어넣기
for i in range(m):
for j in range(m):
new_lock[x+i][y+j]+=key[i][j]
if check[x][y]!=1:
return True
for i in range(m):
for j in range(m):
new_lock[x+i][y+j]-=key[i][j]
return False
'코딩테스트 > 기출' 카테고리의 다른 글
[프로그래머스/이진탐색] 가사 검색 (0) | 2022.05.25 |
---|---|
[프로그래머스/dfs] 600048번: 괄호 변환 (0) | 2022.05.06 |
[카카오] 프로그래머스: 60062번 (0) | 2022.05.03 |
[기출/삼성전자] 백준 15686번: 치킨 배달 (0) | 2022.04.29 |
[기출/삼성전자] 백준 3190번 : 뱀 (0) | 2022.04.29 |