처음 생각한 방법은 ArrayList를 사용해 arr의 값을 옮겨준 다음 list의 길이가 2의 거듭제곱보다 작을 때의 거듭제곱을 구해 list에 거듭제곱이 될 때까지 0을 넣는 방법이었습니다!
처음에 ArrayList에 arr의 값을 옮겨주고~
ArrayList <Integer> list = new ArrayList<>();
for(int n : arr) list.add(n);
Math.pow()를 사용해 2의 거듭제곱과 list의 길이를 비교했습니다!
int res = 0;
for(int i = 0; i<=10; i++){
if(list.size() <= (int)Math.pow(2, i)){
res = (int)Math.pow(2, i);
break;
}
}
list보다 크면서 가장 작은 2의 거듭제곱을 구해야하기 때문에 2의 거듭제곱이 list의 길이보다 크거나 같으면 바로 break를 해주었습니다!
마지막으로 res보다 작을 때 0 list에 0을 넣어주었습니다!
for(int i = 0; i<res; i++){
if(list.size() < res) list.add(0);
}
이렇게 하면 최종 코드는~
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
ArrayList <Integer> list = new ArrayList<>();
for(int n : arr) list.add(n);
int res = 0;
for(int i = 0; i<=10; i++){
if(list.size() <= (int)Math.pow(2, i)){
res = (int)Math.pow(2, i);
break;
}
}
for(int i = 0; i<res; i++){
if(list.size() < res) list.add(0);
}
int[] answer = new int[list.size()];
int i = 0;
for(int n : list) answer[i++] = n;
return answer;
}
}
가 됩니다! 하지만.. 너무 코드가 복잡하고 더럽지 않나요?
다른 분의 코드를 보던 중 훨씬 쉽고 간단한 코드를 발견했습니다!
똑같이 Math.pow()를 사용해 가장 작은 2의 거듭제곱을 구했지만 Arrays.copyOf를 사용해 ArrayList를 만들고 값을 넣어주는 과정을 생략했습니다!
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int length = 1;
while(true) {
if(length >= arr.length) break;
length *= 2;
}
return Arrays.copyOf(arr, length);
}
}
length를 1로 정하고, arr의 길이보다 크거나 같으면 break를 해주는데 그게 아니라면 length를 거듭제곱해줍니다!
마지막으로 Arrays.copyOf를 사용해 arr를 length 길이만큼 늘려주고 빈 공간에는 0을 넣어줍니다!
저도 실력을 키워 깔끔한 코드를 적어야겠습니다!
결과는~
정답~~
그럼 20000~ ^o^
'코딩테스트' 카테고리의 다른 글
프로그래머스 - 다음 큰 숫자 (0) | 2023.12.31 |
---|---|
프로그래머스 - 소인수분해 (0) | 2023.12.30 |
프로그래머스 - 2의 영역 (1) | 2023.12.21 |
프로그래머스 - 가격대 별 상품 개수 구하기 (0) | 2023.12.20 |
프로그래머스 - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.12.20 |