프로그래머스 - 자물쇠와 열쇠 - 구현
문제
입력
나의 처음 코드
좌표를 회전시키는 방법과 열쇠를 옮겨가면서, 자물쇠와의 일치여부를 확인해주어야 한다.
풀이 사진
def rotate(arr, ith, m):
if ith == 0:
return arr
dx = []
dy = []
new_arr = []
for pos in arr:
if ith == 1:
new_arr.append((pos[1], m - pos[0] - 1))
elif ith == 2:
new_arr.append((m - pos[0] - 1, m - pos[1] - 1))
else:
new_arr.append((m - pos[1] - 1, pos[0]))
return new_arr
def solution(key, lock):
answer = True
key_list = []
lock_dict = {}
lock_set = set()
all_set = set()
M = len(key)
N = len(lock)
for i in range(N):
for j in range(N):
all_set.update({(M - 1 + i, M - 1 + j)})
if lock[i][j] == 0:
lock_set.update({(M - 1 + i, M - 1 + j)})
for i in range(M):
for j in range(M):
if key[i][j] == 1:
key_list.append((i, j))
key_dict = set()
for ith in range(1, 4):
new_arr = rotate(key_list, ith, M)
for i in range(M + N):
for j in range(M + N):
for x, y in new_arr:
key_dict.update({(x + i, y + j)})
if all_set.intersection(key_dict) == lock_set:
return True
key_dict.clear()
return False
set에 여러 데이터를 update하기 위해서는 {} 로 묶어줘야 원하는 방향으로 작동을 한다.
key_dict.update((x + i, y + j)) #둘이 같을 경우 하나만 업데이트 됨
key_dict.update({(x + i, y + j)}) #좌표로써 업데이트 됨