본문 바로가기

Algorithm/Implementation

자물쇠와 열쇠

 

 

 

유형 분석 및 구현

이 문제는 복잡하니 천천히 구현해야 한다.

1. 맵 넓히기

2. 자물쇠 설치

3. 키 하나하나 이동하며 설치

- 실패시 : 키 삭제 후 키 로테이션

- 성공시 : 종료

 

 

간단하지만 이걸 구현하는데, 맵을 만들고 키를 만들고 크기 구하고 설정할게 많다.

따라서 천천히 구현할 필요가 있다.

 

 

 

 

# 키 로테이션
def rotation(array):
    x_length = len(array)
    y_length = len(array[0])
    new_array = [[0]*x_length for i in range(y_length)]
    for i in range(x_length):
        for j in range(y_length):
            new_array[j][x_length-i-1] = array[i][j]
    return new_array


# 키 설치 확인
def check(new_lcok):
    lock_length = len(new_lcok)//3
    for x in range(lock_length, lock_length*2):
        for y in range(lock_length, lock_length*2):
            if new_lcok[x][y] != 1:
                return False
    return True



def solution(key, lock):
    m = len(key)
    n = len(lock)

	# 새로운 맵
    new_lock = [[0]*(n*3) for _ in range(len(lock[0]))]

	# 키 설치
    for i in range(n):
        for j in range(n):
            new_lock[i+n][j+n] = lock[i][j]

	# 로테이션하며 확인
    for change in range(4):
        key = rotation(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+i] -= key[i][j]
    
    return False

 

 

 

 

 

 

'Algorithm > Implementation' 카테고리의 다른 글

치킨 배달  (0) 2023.04.14
  (0) 2023.04.09
문자열 재정렬  (0) 2023.04.09
럭키 스트레이트  (0) 2023.04.09
게임 개발  (0) 2023.04.09