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

송용진·2023년 9월 6일
0

알고리즘

목록 보기
106/173

정수 배열 arr이 매개변수로 주어집니다.
arr의 길이가
2의 정수 거듭제곱이 되도록
arr 뒤에 정수 0을 추가하려고 합니다.
arr에 최소한의 개수로 0을 추가한 배열을
return 하는 solution 함수를 작성해 주세요.

내 코드

def is_power_of_two(n):
    return n != 0 and (n & (n - 1)) == 0
    
def solution(arr):
    answer = []
    if is_power_of_two(len(arr)):
        answer = arr
    else:
        while is_power_of_two(len(arr)) == 0:
            arr.append(0)
        answer = arr
    return answer

여기서 (n & (n - 1))는
주어진 숫자와
그 숫자에서 1을 뺀 값을 비트 연산으로 AND 연산한 결과입니다.
숫자가 2의 거듭제곱 형태인 경우
이 연산의 결과는 항상 0이 됩니다.

예시 코드

def solution(arr):
    a = 1
    b = len(arr)
    while a < b :
        a *= 2
    return arr + [0] * (a-b)
"""
2의 거듭제곱 확인 방법 O(1)로 해야 겨우 O(n)
logn으로 확인하면 그걸 n번 반복 -> o(nlogn)
길이 1000개 -> 가장 빠른방법은 각각 하드코딩하기 겨우 10개

"""
profile
백엔드 개발자

0개의 댓글