[Programmers] 비밀

https://school.programmers.co.kr/learn/courses/30/lessons/17681

문제 설명

Neo는 Frodo가 보통 비상 자금을 어디에 숨기는지 알려주는 비밀 지도를 받았습니다. 하지만 이 비밀 지도는 숫자로 암호화되어 있기 때문에 위치를 파악하기 위해서는 복호화를 거쳐야 합니다. 운 좋게도 카드 코드를 해독하는 방법에 대한 지침이 담긴 메모도 찾았습니다.

  1. 카드 한 면의 길이는 n-제곱 배열의 형태로 각 셀은 “방”(” “) 또는 “벽”(“#”)의 두 가지 유형으로 구성됩니다.
  2. 전체 지도는 ​​두 개의 지도를 겹쳐서 얻을 수 있습니다. 각각 “카드 1″과 “카드 2″라고 부르겠습니다. 맵 1 또는 맵 2에서 벽인 부분은 전체 맵에서도 벽입니다. 지도 1과 지도 2 모두에서 비어 있는 영역은 전체 지도에서도 비어 있습니다.
  3. 맵 1과 맵 2는 각각 정수 배열로 인코딩됩니다.
  4. 뒤섞인 배열은 지도의 각 수평선에서 벽 부분을 식별합니다. 1, 빈 부분 0으로 인코딩했을 때 얻은 이진수에 해당하는 값의 배열입니다.

Neo가 Frodo의 비상 자금을 얻을 수 있도록 비밀 지도를 해독하는 데 도움이 되는 프로그램을 작성하세요.

써 내려 가다

처음에는 10진수를 2진수로 변환하여 더하고 0인지 아닌지를 비교하여 ” “와 “#”으로 바꾸는 것이 가능하지 않을까 생각했습니다.

먼저 첫 번째 오류는 변환 후 처음에 길이 변경이 0에서 발생했다는 것입니다.

두 번째 버그는 0이 채워지지 않았기 때문에 두 번째 샷의 거리가 일치하지 않는다는 것입니다.

다시 생각해보니 첫 번째 오류만 수정하면 두 번째 오류는 자동으로 수정될 것 같아서 0을 채우는 방법을 알아보다가 n과 비교해서 채워주는 함수를 찾았습니다. 충분한. (‘지필’)

zfill과 함께 ‘or’ 함수를 직접 사용했기 때문에 0과 1만 비교하면 되는 문제였습니다.

def solution(n, arr1, arr2):
    answer = ()
    for i in range (0,n):
        enc = format(arr1(i) | arr2(i), 'b').zfill(n)
        enc = enc.replace('0',' ').replace('1','#')
        answer.append(enc)
        
    return answer