728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/60059
최종 코드
import copy
def lotate_key(key):
keys = []
keys.append(key)
#1.
new_key = []
for i in range(0, len(key)):
row = []
for j in range(len(key)-1, -1, -1):
row.append(key[j][i])
new_key.append(row)
keys.append(new_key)
#2.
new_key = []
for i in range(len(key)-1, -1, -1):
row = []
for j in range(len(key)-1, -1, -1):
row.append(key[i][j])
new_key.append(row)
keys.append(new_key)
#3.
new_key = []
for i in range(len(key)-1, -1, -1):
row = []
for j in range(len(key)):
row.append(key[j][i])
new_key.append(row)
keys.append(new_key)
return keys
def solution(key, lock):
keys = lotate_key(key)
for k in keys:
for dr in range(-(len(lock)), len(lock)+1):
for dc in range(-(len(lock)), len(lock)+1):
visit = copy.deepcopy(lock)
for r in range(len(key)):
for c in range(len(key)):
nr = r+dr
nc = c+dc
if 0 <= nr < len(lock) and 0 <= nc < len(lock):
#열쇠 돌기 - 자물쇠 돌기 또는 열쇠 홈 - 자물회 홈인 경우,
if lock[nr][nc] == k[r][c]: break
#열쇠 돌기 - 자물쇠 홈인 경우
if lock[nr][nc] == 0 and k[r][c] == 1:
visit[nr][nc] = 1
else: continue
break
else:
for v in visit:
if 0 in v: break
else: return True
return False
풀이 과정
풀이 시간 2시간 46분
혼자서 모의 시험을 진행하면서 이 문제를 풀고 채점을 해보니 자꾸 85점이 나왔다.
이리저리 바꿔보면서 다시 생각해보는 시간까지 1시간 10분이 걸렸다.
따라서, 중간에 다른 문제를 풀다가 다시 돌아와서 미친듯이 고민해서 결국 문제를 풀 수 있었다.
원인은 바로 dr, dc의 범위였다.. 처음에는 -(len(key)-1) ~ len(key)-1까지로 설정했었는데 죽어도 85점이 나왔다....
미친듯이 생각한 결과 -(len(lock)) ~ len(lock)까지로 설정해서 테스트케이스를 온전히 다 맞을 수 있었다.
이 문제를 끝까지 푸는데 소요한 시간이 무려 2시간 46분이나 걸렸다...ㅠㅠ dr, dc범위 때문에 2시간 반이상을 날려먹은 셈이다...
하,, 그래도 풀었다는거에 의미를 담고 싶다! 앞으로 더 잘 할 수 있다!!!
참고
- 5. 기둥과 보 설치 -> https://hwayomingdlog.tistory.com/315
- 7. 블록 이동하기 ->
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 튜플 <2019 카카오 인턴십> Python 3 (0) | 2021.09.06 |
---|---|
Level 4 가사 검색 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2021.09.06 |
Level 2 괄호 변환 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2021.09.05 |
Level 2 문자열 압축 <2020 KAKAO BLIND RECRUITMENT > Python 3 (0) | 2021.09.05 |
Level 3 징검다리 건너기 <2019 카카오 인턴십> Python3 (0) | 2021.09.05 |