Coding Test/Java Coding Test

[프로그래머스 / 자바] - 배열의 길이를 2의 거듭제곱으로 만들기

nam_ji 2024. 7. 10. 05:05

배열의 길이를 2의 거듭제곱으로 만들기

문제

  • 정수 배열 arr이 매개변수로 주어집니다.
  • arr의 길이가 2의 정수 거듭제곱이 되도록
  • arr 뒤에 정수 0을 추가하려고 합니다.
  • arr에 최소한의 개수로 0을 추가한
  • 배열을 출력하는 문제입니다.
  • 입출력 예
    • arr result
      [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6, 0, 0]
      [58, 172, 746, 89] [58, 172, 746, 89]


테스트 (인텔리제이)

  • arr의 크기가 2의 배수인지 알기 위해 while문을 이용합니다.
  • 정수 temp 변수를 선언하고
  • while문에 temp가 arr의 크기보다 작아지면 멈추게 합니다.(그럼 같거나 arr보다 크면서 가장 가까운 2의 배수를 temp에 저장할 수 있습니다.)
  • while문 내부에는 temp에 계속 2를 곱하게 합니다.
  • while문을 통해 얻은 temp를 Arrays 클래스의 copyOf 메서드를 이용하여 arr의 원소를 그대로 복사하면서 원하는 크기의 배열을 얻을 수 있게 temp의 값도 지정해줍니다.
  • 그럼 arr이 그대로 출력되거나 원래 arr보다 큰 배열이면서 원래 원소에 0들이 추가된 배열이 출력되게 됩니다.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class 배열의_길이를_2의_거듭제곱으로_만들기  {
  public static void main(String[] args) {
    /*
    정수 배열 arr이 매개변수로 주어집니다.
    arr의 길이가 2의 정수 거듭제곱이 되도록
    arr 뒤에 정수 0을 추가하려고 합니다.
    arr에 최소한의 개수로 0을 추가한
    배열을 출력하는 문제입니다.

    입출력 예
    arr	                result
    [1, 2, 3, 4, 5, 6]	[1, 2, 3, 4, 5, 6, 0, 0]
    [58, 172, 746, 89]	[58, 172, 746, 89]

    입출력 설명
    #1
    예제 1번의 arr의 길이는 6입니다.
    arr의 길이를 2의 정수 거듭제곱으로 만드는 방법은
    0을 2개, 10개, 26개,..., 추가하는 방법이 있고
    그중 최소한으로 0을 추가하는 방법은 2개를 추가하는 것입니다.
    따라서 [1, 2, 3, 4, 5, 6, 0, 0]을 return 합니다.
    #2
    예제 2번의 arr의 길이는 4이고
    이미 2의 정수 거듭제곱입니다.
    따라서 뒤에 0을 추가하지 않아도 되므로
    [58, 172, 746, 89]를 return 합니다.
     */

    int[] arr = {1, 2, 3, 4, 5, 6};
    int temp = 1;

    while (temp < arr.length) {
      temp *= 2;
    }

    arr = Arrays.copyOf(arr, temp);

    System.out.println(Arrays.toString(arr));
  }
}

프로그래머스 코드

import java.util.*;

class Solution {
    public int[] solution(int[] arr) {
        int temp = 1;
        
        while (temp < arr.length) {
            temp *= 2;
        }
        
        arr = Arrays.copyOf(arr, temp);
        
        return arr;
    }
}