import java.util.Arrays;
public class Solution {
public static int[] solution(int[] arr) {
while ((arr.length & (arr.length - 1)) != 0) {
arr = Arrays.copyOf(arr, arr.length + 1);
arr[arr.length - 1] = 0;
}
return arr;
}
}
비트 연산자로 2의 거듭제곱 확인하기
(arr.length & (arr.length - 1)) != 0
2의 거듭제곱은 이진수로 나타낼 때 한 자리만 1이고 나머지는 0으로 이루어진 수를 의미.(2의 4승은 10000)
이진수에서 어떤 수와 그 수에서 1을 뺀 값의 AND 연산 결과가 0이라면 해당 수는 2의 거듭제곱이며
예를 들어, 8(2의 3승)은 이진수로 1000이고, 7(8에서 1을 뺀 값)은 0111이고
두 수를 AND 연산하면 0000이 되어 결과는 0임.
따라서 (arr.length & (arr.length - 1)) != 0는 배열의 길이가 2의 거듭제곱이 아니라면 true를 반환, 코드에서는 이 조건을 만족할 때까지 배열의 끝에 0을 추가하는 작업을 반복.
Arrays.copyOf
자바에서 배열을 복사하고 크기를 조절하는 데 사용되는 메서드
위에서 제시한 Java 코드에서 Arrays.copyOf(arr, arr.length + 1)는 배열 arr을 하나 더 큰 크기로 복사하고, 추가된 부분을 0으로 초기화하는 역할을 하며 배열의 길이가 2의 거듭제곱이 될 때까지 0을 추가할 수 있다.
'ㅋㅌ' 카테고리의 다른 글
[SQL] 중복 없애기 DISTINCT (0) | 2023.12.31 |
---|---|
CONCAT, GROUP BY (0) | 2023.12.29 |
수열과 구간 쿼리 4 (0) | 2023.12.27 |
lastIndexOf() (0) | 2023.12.25 |
substring, charAt (0) | 2023.12.22 |