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;
}
}