본문 바로가기

코딩 테스트/프로그래머스

[Python] 프로그래머스 lv.0 배열의 길이를 2의 거듭제곱으로 만들기

 

(2의) 제곱수인지 확인

실패 1

def sol(n):
    # return 1 if (n ** 0.5).is_integer() else 2
# is_integer : 정수인지 확인
    return 1 if (n**0.5) % 1 == 0 else 2

 

실패 2 

def solution(arr):
    
    # 2의 제곱인지 확인
    while True :
        if len(arr) ** (0.5).is_integer() : // (0.5) % 1 == 0
            break
        arr.append(0)
    return arr

위 방법으로 하니까 [1,2,3,4,5,6,0,0] 이 아니라, 길이가 2의 제곱일때 멈춰야 하는데 안멈추고 한 번 더 가서 [1,2,3,4,5,6,0,0,0] 이 출력됨

 

정답 코드

다른 사람 코드 1

def solution(arr):
    answer = [2**i for i in range(11)]
    while len(arr) not in answer :
        arr.append(0)
    return arr

 

다른 사람 코드 2

def solution(arr):
    l = len(arr)
    while bin(l).count('1') != 1:
        l += l & (-l)
    return arr + [0] * (l - len(arr))

 

다른 사람 코드 3

import math

def solution(arr):
    answer = [2 ** i for i in range(11)] # arr의 길이를 고려하면 기것해야 10개
    
    while not math.sqrt(len(arr)).is_integer() : 
        arr.append(0)
    return arr