[Programmers] #181857 - 배열의 길이를 2의 거듭제곱으로 만들기 [Java][C++][Python]
[Programmers] #181857 - 배열의 길이를 2의 거듭제곱으로 만들기 [Java][C++][Python]
1. 아이디어
정수 배열 arr에 대해 arr의 길이가 2의 정수 거듭제곱이 되도록 뒤에 0을 최소 개수로 추가만 하면 되는 간단한 문제다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(N)$ |
($N$ = arr의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int n = 1;
while (n < arr.length) {
n <<= 1;
}
return Arrays.copyOf(arr, n);
}
}
Arrays.copyOf 메서드를 활용해 arr의 길이보다 크게 복사하면 뒤가 0으로 자연스럽게 채워진다.
1
2
3
4
5
6
7
8
9
10
#include <bits/stdc++.h>
using namespace std;
vector<int> solution(vector<int> arr) {
int n = 1;
while (n < arr.size()) n <<= 1;
arr.resize(n);
return arr;
}
resize 함수를 활용해 arr의 길이보다 크게 늘리면 뒤가 0으로 자연스럽게 채워진다.
1
2
3
4
5
6
def solution(arr):
n = 1
while n < len(arr):
n <<= 1
return arr + [0] * (n - len(arr))
This post is licensed under CC BY 4.0 by the author.