프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 배열의 길이를 2의 거듭제곱으로 만들기(Java)

Sigfriede 2023. 5. 25. 01:00

  문제 설명

  정수 배열 arr이 매개변수로 주어집니다. arr의 길이가 2의 정수로 거듭제곱이 되도록 arr 뒤에 정수 0을 추가하려고 합니다. arr에 최소한의 개수로 0을 추가한 배열을 return 하는 solution 함수를 작성해 주세요.

 

  제한사항

  • 1 <= arr의 길이 <= 1,000
  • 1 <= arr의 원소 <= 1,000

 

  입출력 예

arr result
[1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 0, 0]
[58, 172, 746, 89] [58, 172, 746, 89]
class Solution {
    public int[] solution(int[] arr) {
        int[] answer = new int[0];
        for (int i = 0; i < arr.length; i++) {
            if (arr.length <= Math.pow(2, i)) {
                answer = new int[(int)Math.pow(2, i)];
                break;
            }
        }
        for (int i = 0; i < arr.length; i++) {
            answer[i] = arr[i];
        }
        return answer;
    }
}

  answer 배열을 생성하고, 크기를 0으로 지정하여 빈 배열로 만듭니다.

  첫 번째 for문이 i는 arr의 길이만큼 순회합니다. 마땅히 지정할 값이 생각나지 않아서 한 것이고, 어차피 break문으로 빠져나올 예정이라서 크게 의미를 두지는 않았습니다.

  if문에서 arr의 길이가 2의 i 거듭제곱보다 큰지 확인합니다. 이를 위해 Math 클래스의 pow 메소드를 이용했습니다. pow는 밑과 지수를 인수로 받아 거듭제곱을 계산하는 기능이 있습니다. 결과값은 double형이므로 int로 형변환을 했습니다. 앞선 조건에 해당하면 answer에 2의 i만큼 거듭제곱한 값을 크기로 재지정합니다. 배열의 최소한의 크기를 원하므로 break를 이용하여 for문을 빠져나옵니다.

  두 번째 for문은 arr 배열을 answer 배열에 복사하는 과정입니다. for문에서 arr의 길이만큼 순회하고 answer의 i번째 위치에 arr의 i번째 원소를 삽입합니다. 원소를 다 복사하고 남은 공간이 있다면 자동으로 0이 채워집니다.