[프로그래머스] 배열의 길이를 2의 거듭제곱으로 만들기 (Java, lv0)알고리즘/기초수학2024. 7. 11. 19:07
Table of Contents
반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/181857
문제 풀이
int[] arr 주어질 때 길이가 2의 거듭 제곱이 되도록 하고, 빈 공간은 정수 0으로 채운다
비트 연산자를 사용해서 2의 거듭 제곱 길이를 구한다
① arr 길이가 4인 경우 : 4 & 3 == 0 이 true가 되서 4가 반환
② arr 길이가 6인 경우 : n보다 커질때까지 result 값을 2배씩 증가해서 8을 반환
private int size(int n) {
if((n & (n - 1)) == 0) {
return n;
}
int result = 1;
while(result < n) {
result <<= 1; // shift
}
return result;
}
전체 코드
- 2의 거듭 제곱 길이만큼 int[] answer 생성 (이때 인덱스 값은 모두 0으로 초기화)
- System.arraycopy(..) : arr 배열의 0 ~ arr.length(exclusive)까지 answer 배열 0번째부터 복사
+ Arrays.copyOf(arr, size) 가 간결한 거 같다
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
int length = arr.length;
int size = size(length);
int[] answer = new int[size];
System.arraycopy(arr, 0, answer, 0, arr.length);
return answer;
}
private int size(int n) {
if((n & (n - 1)) == 0) {
return n;
}
int result = 1;
while(result < n) {
result <<= 1;
}
return result;
}
}
반응형
@leejinwoo1126 :: 천천히 하나씩
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!