정수 배열 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개
"""