[알고리즘문제풀기] 1로 만들기

silver's avatar
Apr 19, 2025
[알고리즘문제풀기] 1로 만들기

문제

내가 작성한 정답

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

silver