한 걸음씩

[프로그래머스][JS] 배열의 길이를 2의 거듭제곱으로 만들기 본문

Programmers

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

winter17 2023. 6. 10. 19:49

https://school.programmers.co.kr/learn/courses/30/lessons/181857

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정

function solution(arr) {

   // 2의 거듭제곱이 0인 경우와 1인 경우
    if (arr.length === 0){
        return [0]
    }else if (arr.length === 1){
        return arr
    }
    // 2의 거듭제곱
    for (let i = 1; i < arr.length; i++){
        if ((2 ** i) === arr.length){ // 2의 거듭제곱과 배열의 길이가 같은 경우
            return arr
        }else if ((2 ** i) > arr.length){ // 2의 거듭제곱이 배열의 길이보다 큰 경우
        	// (2 ** i)배열 길이 - arr 배열 길이만큼 새 배열 생성 후 0으로 채우기
            const newArr = Array((2 ** i) - (arr.length)).fill(0)
            return arr.concat(newArr) // concat 메서드로 두 배열 합치기
            break // 반복 중단
        }
    }
}

반복문을 보면 2 ** 1 = 2부터 시작하는 걸 볼 수 있는데, 0과 1인 경우를 처리를 해줘야 한다.

그래서 arr배열의 길이가 0인 경우 [0]을 채워서 반환하고

1인 경우 arr 배열자체만을 반환하면 된다.


리뷰

문제를 거의 다 풀었는데 2의 거듭제곱만 신경 쓰다 보니까 0과 1을 고려하지 않았다.