정수 배열 arr
이 매개변수로 주어집니다. arr
의 길이가 2의 정수 거듭제곱이 되도록 arr
뒤에 정수 0을 추가하려고 합니다. arr
에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.
제한사항
arr
의 길이 ≤ 1,000arr
의 원소 ≤ 1,000💡입력1
[1, 2, 3, 4, 5, 6]
💡 출력1
[1, 2, 3, 4, 5, 6, 0, 0]
💡 입력2
[58, 172, 746, 89]
💡 출력2
[58, 172, 746, 89]
function solution(arr) {
let answer = [...arr]; // 기본 arr 배열 그대로 넣어줌
let cnt; // 0을 넣어줄 횟수
// 길이 1000까지 존재하므로 1024까지 늘어날 수 있음
const powers = [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
for (let i=0; i<powers.length; i++) {
if (arr.length <= powers[i]) { // 거듭제곱 수보다 작으면
cnt = powers[i] - arr.length; // 0 채울 횟수 정해주고
// answer = Array(powers[i]).concat(arr)
for (let j=0; j<cnt; j++) {
// 그만큼 0 넣어줌
answer.push(0);
}
break; // 반복문 즉시 종료
}
}
return answer;
}
길이를 가장 가까운 2의 거듭제곱() 크기로 확장
→ 추가된 공간을 0으로 채움
function solution(arr) {
const length = arr.length; // 현 배열의 길이
const totalLength = 2 ** Math.ceil(Math.log2(length)); // 전체 배열의 길이
return [...arr, ...new Array(totalLength - length).fill(0)];
}
break문 위치 잘못 작성하여 오답
function solution(arr) {
let answer = [...arr];
let cnt;
const powers = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
for (let i=0; i<powers.length; i++) {
if (arr.length < powers[i]) {
cnt = powers[i] - arr.length;
// answer = Array(powers[i]).concat(arr)
for (let j=0; j<cnt; j++) {
answer.push(0);
}
}
break;
}
return answer;
}
console.log(solution([1, 2, 3, 4, 5, 6]))