어디까지 갈 수 있을까?
[구현] 프로그래머스 자물쇠와 열쇠 본문
문제링크 programmers.co.kr/learn/courses/30/lessons/60059
[답코드]
import copy
def rotate(key):
copy_key=copy.deepcopy(key)
for i in range(len(key)):
for j in range(len(key)):
copy_key[j][-i-1]=key[i][j]
return copy_key
def check(n, m, copy_lock):
for i in range(m, n+m):
for j in range(m, n+m):
if copy_lock[i][j]!=1:
return False
return True
def add(i, j, copy_lock, key):
for k in range(len(key)):
for l in range(len(key)):
copy_lock[i+k][j+l]+=key[k][l]
return copy_lock
def solution(key, lock):
n, m=len(lock), len(key)
lock=[[0]*n]*m+lock
lock=lock+[[0]*n]*m
for i in range(len(lock)):
lock[i]=[0]*m+lock[i]
lock[i]=lock[i]+[0]*m
for _ in range(4):
for i in range(n+m):
for j in range(n+m):
copy_lock=copy.deepcopy(lock)
copy_lock=add(i, j, copy_lock, key)
if check(n, m, copy_lock):
return True
key=rotate(key)
return False
[풀이법]
[[0]*n]*m 를 작성할 때 n은 열로, m은 행으로 생각하고 작성했다.
테스트 케이스 15번만 틀렸는데 키값이 [[1]] 자물쇠값이 [[0]] 일 때를 시도해보면 대부분 고칠 수 있을 것 같다
열쇠의 돌기 부분과 자물쇠의 돌기가 만나선 안 되기 때문에 check 함수를 수행할 때 copy_lock이 0인 부분 & 2인 부분이 모두 있으면 안 된다
728x90
'알고리즘 > 문제' 카테고리의 다른 글
[문자열] 프로그래머스 방금그곡 (0) | 2021.05.04 |
---|---|
[해시] 프로그래머스 위장 (0) | 2021.05.03 |
[BFS] 백준 16236 아기상어 (0) | 2021.03.25 |
[DP] 백준 14501 퇴사 (0) | 2021.03.24 |
[브루트포스] 백준 1038 감소하는 수 (0) | 2021.03.18 |
Comments