。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

ㅋㅌ

비트 연산자로 2의 거듭제곱 확인하기

quarrrter 2024. 1. 3. 00:38

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