읽기 전
- 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
- 개인적으로 배운 점을 정리한 글입니다.
문제 링크
문제 풀이
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 |