코테 노트/프로그래머스

Level 3 자물쇠와 열쇠 <2020 KAKAO BLIND RECRUITMENT> Python 3

화요밍 2021. 9. 5. 23:55
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/60059

 

코딩테스트 연습 - 자물쇠와 열쇠

[[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true

programmers.co.kr

 

최종 코드

 

GitHub - hwayeon351/Programmers-Algorithms: 프로그래머스 알고리즘 소스 코드 모음

프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.

github.com

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시간 반이상을 날려먹은 셈이다...

하,, 그래도 풀었다는거에 의미를 담고 싶다! 앞으로 더 잘 할 수 있다!!!

 

 


참고

 

Level 3 기둥과 보 설치 <2020 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/60061?language=python3 코딩테스트 연습 - 기둥과 보 설치 5 [[1,0,0,1],[1,1,1,1],[2,1,0,1],[2,2,1,1],[5,0,0,1],[5,1,0,1],[4,2,1,1],[3,2,1,1]] [[1,0,0..

hwayomingdlog.tistory.com

 

Level 3 외벽 점검 <2020 KAKAO BLIND RECRUITMENT> Python 3

https://programmers.co.kr/learn/courses/30/lessons/60062?language=python3# 코딩테스트 연습 - 외벽 점검 레스토랑을 운영하고 있는 "스카피"는 레스토랑 내부가 너무 낡아 친구들과 함께 직접 리모델링 하기..

hwayomingdlog.tistory.com

  • 7. 블록 이동하기 -> 
728x90
반응형