문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제풀이
- Key를 90도씩 회전하는 함수 따로 구현
- 자물쇠의 3배 크기인 지도를 새로 만들기
- 자물쇠의 홈과 열쇠의 홈이 만나면 값이 1이 되므로 자물쇠에 열쇠를 넣고 모든 부분의 합이 1이 되면 True 한 곳이라도 1이 아니라면 False출력
코드
# key 90도 회전
def rotate_a_matrix_by_90_degree(a):
n = len(a) #행
m = len(a[0]) #열
result = [[0] * m for _ in range(n)] #결과리스트
for i in range(n):
for j in range(m):
result[j][n - i - 1] = a[i][j]
return result
# 자물쇠가 중간 부분이 1인지 확인
def check(new_lcok):
lock_length = len(new_lcok) // 3
for i in range(lock_length, lock_length * 2):
for j in range(lock_length, lock_length * 2):
if new_lcok[i][j] != 1:
return False
return True
def solution(key, lock):
n = len(lock)
m = len(key)
# 자물쇠 길이 3배 크기의 도화지
new_lock = [[0] * (n * 3) for _ in range(n * 3 )]
# 자물쇠 중앙에 키 넣기
for i in range(n):
for j in range(n):
new_lock[i + n][j + n] = lock[i][j]
# 4가지 방향에 대해서 확인
for i in range(4):
key = rotate_a_matrix_by_90_degree(key) #열쇠 회전
# 중앙 이후로 확인 필요 x
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 + j] -= key[i][j]
return False'Algorithm > Simulation' 카테고리의 다른 글
| [Python] 치킨배달 (1) | 2023.01.26 |
|---|---|
| [Python] 뱀 (0) | 2023.01.25 |
| [Python] 게임 개발 (0) | 2023.01.17 |
| [Python] 왕실의 나이트 (0) | 2023.01.17 |
| [Python] 시각 (0) | 2023.01.16 |