Developer. Designer

프로그래머스 기초트레이닝 Day20-1

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

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

※ 제한 사항
1 ≤ arr의 길이 ≤ 1,000
1 ≤ arr의 원소 ≤ 1,000

입출력

arr result
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 0, 0]
[58, 172, 746, 89] [58, 172, 746, 89]


function solution(arr) {
  // 주어진 배열의 길이
  var length = arr.length;

  // 추가해야 할 0의 개수 계산
  var additionalZeros = Math.pow(2, Math.ceil(Math.log2(length))) - length;

  // 주어진 배열과 0을 추가한 배열을 합치기
  var answer = arr.concat(Array(additionalZeros).fill(0));

  return answer;
}

length 변수에 주어진 배열 arr의 길이를 저장합니다.
additionalZeros 변수에 2의 거듭제곱으로 만들기 위해 필요한 0의 개수를 계산합니다.
이를 위해 Math.log2 함수로 배열의 길이의 로그 값을 구하고, Math.ceil 함수로 올림을 수행합니다. Array(additionalZeros).fill(0)를 사용하여 0으로 채워진 배열을 만듭니다.
이 배열은 추가해야 할 0의 개수만큼의 길이를 가지게 됩니다.
arr.concat() 메서드를 사용하여 기존 배열과 0으로 채워진 배열을 합치고, 그 결과를 answer 변수에 저장합니다.
최종적으로 answer 배열을 반환합니다.
예를 들어, 입력 배열이 [1, 2, 3, 4]인 경우, 배열의 길이를 2의 정수 거듭제곱으로 만들기 위해 필요한 0의 개수는 2개입니다.
따라서 결과로 반환되는 배열은 [1, 2, 3, 4, 0, 0]이 됩니다.