코딩테스트연습/[프로그래머스] Java

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

_꼬마돌 2023. 8. 5. 16:15
반응형

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

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/181857

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

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

 

풀이

짝수를 계속 2로 나눴을 때 1이 되면 그 수는 2의 거듭제곱이다. 그래서 while문으로 arr의 길이가 짝수인 경우, 계속 2로 나눠 1이 된다면 arr의 길이는 이미 2의 거듭제곱이므로 arr을 그대로 return 하도록 했다.

그 다음에 정수 x, y를 선언하고, arr의 길이를 len으로 초기화했다. while문으로 x의 값이 arr의 길이를 넘어설 때까지 Math.pow() 메서드로 x를 2의 거듭제곱으로 증가시킨다. x의 값이 arr의 길이보다 커지면 answer 배열의 크기를 x 값만큼으로 지정한 뒤에 반복문 돌려서 배열에 값을 할당했다.

 

소스코드

class Solution {
    public int[] solution(int[] arr) {
        int length = arr.length;
        
        while (length % 2 == 0) {
            length = length / 2;
        }
        if (length == 1) {
            return arr;
        }
        
        int x = 0;
        int y = 0;
        int len = arr.length;
        
        while (len > x) {
            x = (int) Math.pow(2, y++);
        }
        
        int[] answer = new int[x];
        for (int i = 0; i < arr.length; i++) {
            answer[i] = arr[i];
        }
        
        return answer;
    }
}

 

반응형