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

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

문제

내가 작성한 정답

class Solution { public int solution(int[] num_list) { int answer = 0; for(int i : num_list){ while(i != 1){ if(i%2==0) i/=2; else i = (i-1)/2; answer++; } } return answer; } }

다른 사람들의 정답

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; // int타입이라 1을 빼지 않아도 소숫점 아래 날라감 answer++; } } return answer; } } import java.util.Arrays; class Solution { public int solution(int[] num_list) { return Arrays.stream(num_list) // 각 정수를 이진 문자열로 변환하고, 그 길이에서 1을 뺌 .map(i -> Integer.toBinaryString(i).length() - 1) .sum(); } } 어떤 정수를 2진수로 나타내면, 길이(length)는 그 수를 표현하는 비트 수이다 length() - 1은 가장 왼쪽(최상위) 비트가 차지하는 자리수(지수)를 의미 -> length - 12진수에서 가장 큰 2의 거듭제곱 지수 2진수 길이에서 1을 빼는 값은 해당 숫자를 1이 될 때까지 나누는 횟수와 결과가 같다
Share article

silver