[프로그래머스] 비밀 지도Lv.1

나의 풀이

def solution(n, arr1, arr2):
    a = []
    for i in range(n):
        s = ''
        arr1[i] = format(int(arr1[i]), 'b').zfill(n)
        arr2[i] = format(int(arr2[i]), 'b').zfill(n)

        for j in range(len(arr1)):
            if arr1[i][j] == '1' or arr2[i][j] == '1':
                s += '#'
            else:
                s += ' '
        a.append(s)

    return a
  • 입력된 배열을 돌면서, 2진수 형태로 변환해 주었다. 앞의 0부분은 생략되어 포맷되기 때문에, zfill을 사용하여 앞 부분을 해당 글자수 만큼 0으로 채워주었다.
  • 변환된 2진수 형태를 가지고, or 연산을 해야하기 때문에, 둘 중에 하나라도 1이면 #을 둘다 1이 아니면 공백을 문자열에 추가하여 a 리스트에 넣어주었다.

다른 사람 풀이 & 느낀점

파이썬 기본 비트연산자 함수를 사용하면 더 간결하게 짤 수 있다.
zip 이라는 것을 사용하여 하나의 for 문에 객체를 두개를 받을 수 있었고, 이를 활용하여 bin 이라는 2진수로 변환하는 함수를 사용하셨다.

def solution2(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','#')
         a12=a12.replace('0',' ')
         answer.append(a12)
     return answer

단, bin 을 사용하면 0b라는 문자가 붙기 때문에, [2:]를 함으로써 이를 제거를 하셨다.

0개의 댓글