[프로그래머스] 비밀지도 - 파이썬

입력 형식

입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.

1 ≦ n ≦ 16 arr1, arr2는 길이 n인 정수 배열로 주어진다. 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.

출력 형식

원래의 비밀지도를 해독하여 ’#’, 공백으로 구성된 문자열 배열로 출력하라.

입출력 예제

매개변수
n 5
arr1 [9, 20, 28, 18, 11]
arr2 [30, 1, 21, 17, 28]
출력 [”#####”,”# # #”, ”### #”, ”# ##”, ”#####”]
매개변수
n 6
arr1 [46, 33, 33 ,22, 31, 50]
arr2 [27 ,56, 19, 14, 14, 10]
출력 [”######”, ”### #”, ”## ##”, ” #### ”, ” #####”, ”### # ”]

내 코드

def solution(n, arr1, arr2):
    answer = []
    bit = []
    for i in range(n) :
        bit.append(arr1[i] | arr2[i])
    for i in list(map(bin,bit)) :
        i = i[2:]
        if len(i) < n :
            i = '0'*(n-len(i)) + i
        trans = i.replace('1','#').replace('0',' ')
        answer.append(trans)
    return answer

레벨 1짜리 문제이지만, 생각보다 오래 걸렸다. 오래걸렸던 포인트는 첫 번째로 비트 연산자로 두 배열을 | 연산하는 것을 떠올리는데 오래 걸렸고, 그리고 10진법을 2진법으로 변환 하는 bin()함수를 몰라서 오래 걸렸고, 마지막으로 n만큼 0을 붙여넣어주는 것에서 *(n-len(i)) 이 부분을 생각하지 못해서 오래 걸렸다.

이번 문제를 풀면서 새로 배운 것은 다시 사용할 일이 있을지는 모르겠지만 bin() 함수와 문자열 바꿀 때 replace()를 쓰면 쉽게 할 수 있다는 것을 배웠다.


다른 사람의 코드

def solution(n, arr1, arr2):
    answer = []
    for i,j in zip(arr1,arr2):
        a12 = str(bin(i|j)[2:])
        a12=a12.rjust(n,'0')
        a12=a12.replace('1','#').replace('0',' ')
        answer.append(a12)
    return answer

먼저 zip() 함수는 두 배열을 짝지어 주는 함수이다. 그래서 두 배열을 한번에 비트 연산 해줄 수 있도록 하였고, 그리고 rjust() 함수는 오른쪽으로 정렬해주는 함수인데, rjust(n,'0')을 통해 n자리수로 맞추고 남는 왼쪽 여백에는 '0'을 채우도록 했다. 문자열을 쓸 때 유용하게 쓰일 함수라고 생각된다. 그 외에는 비슷하게 풀었다.


Written by@[Ykss]
고이게 두지 않고 흘려보내는 개발자가 되자.

GitHubInstagramLinkedIn