문제
내가 작성한 정답
class Solution {
public int solution(int[] num_list) {
int answer = 0;
for(int i=0; i<num_list.length; i++){
int a = num_list[i];
while (a!=1){
if(a%2==0) a = a / 2;
else a = (a - 1) / 2;
answer++;
}
}
return answer;
}
}
// 위에 작성한 것 stream으로 변환시키기
import java.util.*;
class Solution {
public int solution(int[] num_list) {
return Arrays.stream(num_list)
.map(i-> {
int count = 0;
while (i != 1) {
if (i % 2 == 0) i = i / 2;
else i = (i - 1) / 2;
count++;
}
return count;
}).sum();
}
}
다른 사람들의 정답
toBinaryString
import java.util.Arrays;
class Solution {
public int solution(int[] num_list) {
return Arrays.stream(num_list)
.map(i -> Integer.toBinaryString(i).length() - 1)
// - Integer.toBinaryString(i): 정수 i를 2진수 문자열로 변환한다. (예: 7 -> "111")
// - .length(): 2진수 문자열의 길이를 구한다. (예: "111" -> 3)
// - -1: 2진수 표현에 필요한 비트 수에서 1을 뺀디.
// (사실상 2진수 표현의 자릿수 -1, 예를 들어 7은 "111"로 3자리지만, 2^2 + 2^1 + 2^0 으로 표현되므로 2가 된다.)
// - 결과적으로, 각 정수를 2진수로 표현하는 데 필요한 최소 비트 수 - 1을 계산힌다.
.sum(); // 3. 스트림의 모든 요소 (각 정수에 대해 계산된 비트 수 - 1)를 합산하여 최종 결과를 반환힌다.
}
}
int 타입이라 -1 필요없음
class Solution {
public int solution(int[] num_list) {
int answer = 0;
for(int i = 0;num_list.length>i;i++){
while(num_list[i]!=1){
num_list[i]/=2;
answer++;
}
}
return answer;
}
}
int 타입이라 -1 필요없음
class Solution {
public int solution(int[] num_list) {
int answer = 0;
int a = 0;
for(int i = 0; i < num_list.length; i++){
int j = 0;
while (num_list[i] >= Math.pow(2, j)) {
a = j;
j++;
}
answer += a;
}
return answer;
}
}
Share article