읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
2차원 배열의 회전을 다뤄보지 않았다면 해결하기 어려울 수 있는 문제였다. 필자도 해결하지 못해 결국 라이트업을 찾고 해결하였다.
문제 조건에서 key를 90도씩 회전하면서 맞추되 1칸부터 key 전체를 맞출 수 있으니 격자배열을 순회하면서 4번 회전해 맞추고 조건이 성립하면 True를 반환하면 되겠다.
- 2차원 배열을 90도 회전시키는 함수 정의
- 주어진 key와 자물쇠를 검사하는 함수 정의
- key가 이동할 수 있는 거리만큼 순회하되 각 지점에서 90도씩 4번 회전하여 검사
- 중간에 true가 나오면 True리턴, 끝까지 순회가 가능하면 False
python 코드
def solution(key, lock):
def rotate(m):
N = len(m)
res = [[0 for _ in range(N)] for _ in range(N)]
for r in range(N):
for c in range(N):
res[c][N - 1 - r] = m[r][c]
return res
def check(s_r, s_c, K, L):
k, l = len(K), len(L)
v = 2 * (k - 1) + l
grid = [[0 for _ in range(v)] for _ in range(v)]
for i in range(k):
for j in range(k):
grid[s_r + i][s_c + j] += K[i][j]
for i in range(l):
for j in range(l):
grid[k - 1 + i][k - 1 + j] += L[i][j]
if grid[k - 1 + i][k - 1 + j] != 1:
return False
return True
for r in range(len(key) + len(lock) - 1):
for c in range(len(key) + len(lock) - 1):
x = key
for i in range(4):
x = rotate(x)
if check(r, c, x, lock) is True:
return True
return False
'Algorithms > Programmers' 카테고리의 다른 글
Programmers. 경주로 건설 (0) | 2021.09.10 |
---|---|
Programmers. 표 편집 (0) | 2021.09.10 |
Programmers. 징검다리 건너기 (0) | 2021.09.09 |
Programmers. 호텔 방 배정 (0) | 2021.09.09 |
Programmers. 2개 이하로 다른 비트 (0) | 2021.09.09 |