728x90
🔗 Problem Link
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❔Thinking
- key와 lock이 주어질 때, key를 상하좌우, 회전하여 lock의 홈에 끼워넣을 수 있는지를 반환한다.
💻Solution
def right_rotate_90_degree(key):
new_key = []
for i in zip(*key):
new_key.append(list(reversed(i)))
return new_key
def check(new_lock):
n = len(new_lock) // 3
for i in range(n, n*2):
for j in range(n, n*2):
if new_lock[i][j] != 1:
return False
return True
def solution(key, lock):
m = len(key)
n = len(lock)
# 자물쇠 확장하기
new_lock = [[0 for _ in range(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 _ in range(4):
key = right_rotate_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
🗝️keypoint
- 주어진 list 시계방향으로 90도 회전하는 방법은, zip과 reversed를 활용하여 구현할 수 있다.
- list 복제는 deepcopy를 활용할 수 있지만, slicing에 비해 속도가 현저히 떨어진다.
'코딩테스트 > Python' 카테고리의 다른 글
[Programmers] Level 4. 가사 검색 (0) | 2023.01.12 |
---|---|
[Programmers] Level 2. 괄호 변환 (0) | 2023.01.10 |
[Baekjoon] 4485. 녹색 옷 입은 애가 젤다지? (0) | 2023.01.08 |
[Baekjoon] 6497. 전력난 (0) | 2023.01.08 |
[Baekjoon] 14501. 퇴사 (0) | 2023.01.08 |