[python] programmers 배열의 길이를 2의 거듭제곱으로 만들기

도리·2025년 4월 9일

내 코드

def solution(arr):
    num = len(arr)
    twolist = [2,4,8,16,32,64,128,256,512,1024]
    padding = 0
    
    for i in range(len(twolist)):
        if (num == twolist[i]) :
            break
        elif num < twolist[i] :
            num = twolist[i]
            break
    padding = num - len(arr)
    print(padding)
    
    for i in range(padding):
        arr.append(0)
            
    return arr
  1. arr의 길이를 num에 저장
  2. 미리 만들어둔 twolist (2의 거듭제곱 리스트)에서
    num이 해당 리스트에 동일하거나 작으면, 거기에 맞게 num 값을 조정함
  3. 차이만큼 0을 append()로 붙여서 반환
  • for문이 2개 (비효율적)
  • 리스트 기반 비교라서 딱 twolist 안에 있는 범위만 처리 가능

다른 코드

def solution(arr):
    i = 1
    while i < len(arr):
        i *= 2
    return arr + [0] * (i - len(arr))
  1. i = 1부터 시작
  2. len(arr)보다 크거나 같아질 때까지 2배씩 곱함 (즉, 최소의 2의 거듭제곱 찾기)
    3.그 차이만큼 [0] * 차이로 패딩해서 반환
  • 간결하고 범용적..

총평!
# arr + [0] 해도 추가가 되는군
#리스트로 미리 지정 xx, 변수 i 를 사용해서 길이 계산을 바로하면 되는군

profile
인공지능응용학과 졸업

0개의 댓글