[작성일: 2023. 11. 10]
풀이
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr) {
int arrLength = arr.length;
int length = 1;
while (length < arrLength) {
length *= 2;
}
int[] answer = new int[length];
for (int i = 0; i < answer.length; i++) {
if (i < arr.length) {
answer[i] = arr[i];
} else {
answer[i] = 0;
}
}
return answer;
}
}
2, 4, 8, 16, 32... 처럼 2를 여러번 곱한 것을 2의 거듭제곱이라고 한다.
우선 주어지는 arr의 length가 2의 거듭제곱인지 확인하기 위해 length라는 변수의 값을 1로 초기화 하고 while문으로 length의 길이와 arr.length의 길이를 비교했다.
length가 arr.length보다 작을 경우 length에 2를 누적해서 곱해준다. (거듭제곱을 저장하기 위해)
arr의 길이가 6이라면 length는 8까지 누적되고 while문을 false가 되어 돌지 않게 된다.
그럼 length의 길이로 새 배열을 선언하고, for문을 이용해서 i가 arr.length보다 작다면 answer[i]에 arr[i]를 대입하고,
i가 arr.length보다 크다면 거듭제곱을 위한 것이므로 0을 추가하면 된다.