/ 제출 1 /
def solution(key, lock):
answer = False
# 키 끼워넣을 공간 위해서 Lock늘려주기
n = len(lock)
new_lock = [[0]*(n+2*(n-1)) for _ in range(n+2*(n-1))]
for i in range(n):
for j in range(n):
new_lock[n-1+i][n-1+j] = lock[i][j]
# 키 4방향으로 확인
for i in range(4):
key = list(map(list, rotate_key(key))) # 시계반대방향회전
answer = push(key, new_lock)
if answer:
break
return answer
def rotate_key(key):
return list(reversed(list(zip(*key))))
def push(key, lock):
start = len(key) -1
find = False
lock_save = lock
for x in range(len(lock)-len(key)):
for y in range(len(lock)-len(key)):
for i in range(len(key)):
for j in range(len(key)):
lock[x+i][y+j] += key[i][j]
new_lock = []
for i in range(len(key)):
new_lock.append(lock[i+len(key)-1][len(key)-1:2*len(key)-1])
if check(new_lock):
return True
for i in range(len(key)):
for j in range(len(key)):
lock[x+i][y+j] -= key[i][j]
return False
def check(lock):
for i in range(len(lock)):
for j in range(len(lock)):
if lock[i][j] != 1:
return False
return True
채점 결과
정확성: 56.0
합계: 56.0 / 100.0
2, 4, 6, 7, 8, 11, 12, 14, 15, 17, 18, 19, 20, 21, 38 실패
하.. 이정도는 풀어야 하는거 아닌가.. 한 번 풀어봤던 문제인데.. 속상..
/ 다른 분 풀이 /
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(m):
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, lock_length * 2):
for j in range(lock_length, lock_length * 2):
if new_lock[i][j] != 1:
return False
return True
def solution(key, lock):
n = len(lock)
m = len(key)
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]
for rotation in range(4):
key = rotate_a_matrix_by_90_degree(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 + j] -= key[i][j]
return False
'CodingTest > Programmers' 카테고리의 다른 글
[ 프로그래머스 ] 문자열 내 마음대로 정렬하기 (0) | 2022.07.05 |
---|---|
[ 프로그래머스 ] [1차] 다트게임 (0) | 2022.07.01 |
[ 프로그래머스 ] 거리두기 (0) | 2022.06.30 |
[ 프로그래머스 / 파이썬 ] 프렌즈 4블록 (0) | 2022.06.30 |
[ 프로그래머스 ] 후보키 (0) | 2022.06.29 |