본문 바로가기
Algorithm/Programmers

[Programmers] Lv.0 / 배열의 길이를 2의 거듭제곱으로 만들기 / Java

by unknownomad 2024. 2. 14.

문제

 

풀이

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        return setArray(arr);
    }
    
    private int[] setArray(int[] arr) {
        int length = arr.length;
        
        while(!isPowerOfTwo(length)) {
            length++;
        }
        int[] result = Arrays.copyOf(arr, length);
        return result;
    }
    
    private boolean isPowerOfTwo(int n) {
        /**
        * 2의 거듭제곱 : 100..0 형태
        * 2의 거듭제곱과 2의 거듭제곱 - 1 의 이진수를 AND 연산 시
        * 100..0 과 011..1 의 AND 연산이 이루어짐
        * 전체 값이 0 이 나옴(그러나 실제 값이 0 은 아님)
        */
        return (n & (n - 1)) == 0 && n != 0;
    }
}
import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        int length = 1;

        while (length < arr.length) {
            length *= 2;
        }
        return Arrays.copyOf(arr, length);
    }
}

 

출처

https://school.programmers.co.kr/learn/courses/30/lessons/181857

댓글