[프로그래머스](python) 비밀 지도 - 2018 KAKAO BLIND RECRUITMENT

문제


🧩 수도 코드

  1. 리스트 각각 이진법으로 변환
  2. 5자리수로 만들기
  3. 배열 각각 비교해서 '1', '0'인지 판별하고 새 리스트에 '#',''로 넣기
  4. 5개씩 문자열 정리해서 출력

🏁 내 풀이


def solution(n,arr1,arr2):

    new_arr1 = []
    new_arr2 = []
    sum_arr = []

    for i in range(len(arr1)):
        new_arr1.append(format(arr1[i], 'b'))
        if len(new_arr1[i]) < n:
            new_arr1[i] = (n-len(new_arr1[i]))*'0'+new_arr1[i]
        new_arr2.append(format(arr2[i], 'b'))
        if len(new_arr2[i]) < n:
            new_arr2[i] = (n-len(new_arr2[i]))*'0'+new_arr2[i]


    for i in range(len(new_arr1)):
        for j in range(len(new_arr2)):
            if new_arr1[i][j] == '0' and new_arr2[i][j] == '0':
                sum_arr.append(' ')
            elif new_arr1[i][j] or new_arr2[i][j] == '1':
                sum_arr.append('#')

    sum_arr = ''.join(sum_arr)
    answer = list(map(''.join, zip(*[iter(sum_arr)]*n)))
    
    return answer

📌 진수 변환

📌 ''.join() 문자열 합치기, 문자열 자르기


🧩 다른 풀이

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

📌 bin(i|j)

  • bin(i|j)[2:] 앞의 0b를 제거해 변환
  • 내 코드에서 같은 부분
  • new_arr1.append(format(arr1[i], 'b'))
    
  • str 로 문자열 변환(1👉🏻# 위해)

📌 rjust()

  • 스트링 앞에 0 채우기
  • 내 코드에서 이 부분과 같음..^^
  • if len(new_arr1[i]) < n:
                new_arr1[i] = (n-len(new_arr1[i]))*'0'+new_arr1[i]

📌 replace()


🧩 다른 풀이 2


solution = lambda n, arr1, arr2: ([''.join(map(lambda x: '#' if x=='1' else ' ', "{0:b}".format(row).zfill(n))) for row in (a|b for a, b in zip(arr1, arr2))])

좋은 웹페이지 즐겨찾기