Post

[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.