비밀지도

개발새발log·2021년 10월 10일
0

Programmers

목록 보기
14/35


알고리즘 자체는 쉽게 생각했는데 문자열 다루는 거 때문에 골머리를 앓았다😇

접근 방식

처음에는 각 리스트 원소를 이진수로 변환하고 OR 연산을 하자고 생각했는데 이거 필요없음. 그냥 바로 OR 연산 들어가면 된다.

  1. 각 리스트의 원소끼리 OR 연산한 리스트 추출
  2. 이 리스트를 이진수 형태로 변환. 이때, 자리수 맞추는 작업이 중요하다.
  3. 이진수 리스트를 요구하는 형태로 출력되게끔 변환하기

최종 코드

def solution(n, arr1, arr2):
    orarr = [i | j for i, j in zip(arr1, arr2)] #OR 연산
    
    #이진수 형태의 배열
    binarr = []
    for element in orarr:
        binarr.append(format(element, 'b').zfill(n)) #zfill을 활용해 자리수 통일하기

    #출력형태에 맞게 변환
    ans = []
    for b in binarr:
        tmp = ''
        for i in range(n):
            if(b[i]=='1'): tmp+='#'
            else: tmp+=' '
        ans.append(tmp)
    
    return ans

📌 tips

  • zip(a1, a2): a1 배열과 a2 배열의 각 원소 페어링
  • 십진수를 이진수로 변환
    bin(n)format(n, 'b') 을 활용하면 된다.
    bin(n)은 접두사 '0b'가 붙는다는 차이가 있다..! 이거 때문에 상당히 시간 많이 잡아먹음 자리수 맞추는 문제 때문에..^^ 이 문제에선 format을 사용하는 게 정신건강에 이롭다.
  • 문자열 길이 맞추기 (앞에 0으로 채우기) -> zfill(n) (n은 길이)
profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글