1 분 소요

문제 링크

내 풀이


def solution(n, arr1, arr2):
    codes1 = []
    codes2 = []
    result = []
    for num in arr1:
        code1 = ''
        while len(code1) < n:
            code1 = str(num % 2) + code1
            num = num // 2
        codes1.append(code1)
    for num in arr2:
        code2 = ''
        while len(code2) < n:
            code2 = str(num % 2) + code2
            num = num // 2
        codes2.append(code2)
    for i in range(n):
        secret = ''
        for j in range(n):
            if codes1[i][j] == '1' or codes2[i][j] == '1':
                secret += '#'
            else:
                secret += ' '
        result.append(secret)
        
    return result

다른 풀이

def solution(n, arr1, arr2):
    
    result = [] # 최종 결과를 저장할 리스트 초기화
    
    # 두 배열을 병렬로 처리하기 위해 zip 사용
    for a, b in zip(arr1, arr2):
        
        # 두 숫자의 OR 연산을 수행한 결과를 이진수 문자열로 변환
        # bin()을 사용하면 "0b10100"으로 나오기때문에 [2:]를 통해 앞의 0b를 빼줘야한다
        value = bin(a | b)[2:]
        
        # 이진수 문자열의 길이가 n보다 작으면 앞에 "0"을 채워줌
        if len(value) < n:
            value = "0"*(n - len(value)) + value
        
        # "0"을 " "(공백)으로, "1"을 "#"으로 변환
        value = value.replace("0", " ").replace("1", "#")
        
        # 결과 리스트에 변환된 문자열 추가
        result.append(value)
        
    return result

출처: https://1ets-just-do-it.tistory.com/74 [파이썬은 신이야🔥🔥🔥:티스토리]

풀이 해석

bin 함수를 이용해 숫자를 2진법으로 변환 |(or)를 이용해 value 표현함 replace를 이용하여 0은 공백, 1은 #으로 변환해주었다.

배울 점

  • bin 함수의 이용
  • ’ 를 이용한 활용
  • replace를 이용해 ‘ ‘과 ‘#’으로 변환

댓글남기기