Algorithm/Programmers

[Python] 비밀지도

느낌표 공장장 2021. 4. 30. 01:54
def solution(n, arr1, arr2):
    map1 = []
    map2 = []
    for i in arr1 :
        b = format(i, 'b')
        a = list(map(int, str(b)))
        if len(a) != n :
            while len(a) < n :
                a.insert(0, 0)
        map1.append(a)
    
    for i in arr2 :
        b = format(i, 'b')
        a = list(map(int, str(b)))
        if len(a) != n :
            while len(a) < n :
                a.insert(0, 0)
        map2.append(a)
        
    secret_map = []
    for x, y in zip(map1, map2) :
        s_map = []
        for q, w in zip(x, y) :
            if q or w == 1 :
                s_map.append("#")
            else :
                s_map.append(" ")
        secret_map.append(''.join(s_map))        
        
    
    return secret_map

arr1과 arr2를 for문을 사용해 2진수로 받고 리스트를 만들고 길이를 맞추는 작업을 해서

마지막 for문과 zip을 이용해 1을 #로 0을 공간으로 만들어주는 식으로 코드를 짰다. 그러나 ! ! ! ! 

 

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

다른 분의 풀이를 봤는데 나는 왜 replace와 bin(i|j) 를 생각하지 못했는가,, 

 

풀이를 해보자면

① zip함수를 이용해 arr1, arr2 두 리스트를 이용해 for문을 만든다.

② ➀ bin 함수를 이용해 2진수로 바꾸어주고, 비트연산자 중 |(or연산) 를 이용하여 둘을 합쳐준다. 

    ➁ 맨 앞의  'ob' 빼고 저장해야하므로(bin함수를 사용하면 'ob10110' 형태와 같이 출력된다.) [2:]를 이용해 슬라이싱해준다.

    ➂ 문자형으로 바꾸어 변수에 저장해준다.

③ 2진수의 길이가 각각 다르니 맞추기 위해 rjust 함수(오른쪽 정렬해준다. 또한 2번째 인자로 값을 주면 그 값으로 공백을 채운다)를 사용.      

    길이를 n으로 맞춰 오른쪽 정렬해주고 공백은 0으로 채워준다.

replace 함수를 사용해 1은 '#'으로 0은 공백으로 대체시켜준다.

⑤ answer 리스트에 추가해준다.

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

[Python] 실패율  (0) 2021.05.02
[Python] 다트 게임  (0) 2021.05.01
[Python] 키패드 누르기  (0) 2021.04.29
[Python] 체육복  (0) 2021.04.27
[Python] 자릿수 더하기  (0) 2021.04.27