본문 바로가기
CodingTest/Programmers

[프로그래머스] Lv0 일로만들기

by yoondoo 2024. 11. 11.
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/181880

풀이

정답은 더보기

더보기
    public static void main(String[] args) {
        class Solution {
            public int solution(int[] num_list) {
                int answer = 0;
                for (int i = 0; i < num_list.length; i++)
                    while (num_list[i] > 1) {
                        num_list[i] = num_list[i] / 2;
                        answer++;
                    }
                return answer;
            }
        }
    }

 

  • 어차피 int를 나누는 것이기 때문에 5/2와 (5-1)/2와 동일하므로 굳이 조건을 분리할 필요는 없었다.

결론

다른사람 풀이에서 미쳐 생각하지 못한 방식이 있어서 적어놨다.

Integer.toBinaryString(int value); 메서드를 이용한 방식이다.

 

이진수의 자릿수는 *2하면 자릿수가 하나 늘어나고 /2하면 자릿수가 하나 줄어든다 그 특징을 이용할 수 있었다.

 

해당 코드는 더보기

더보기
import java.util.Arrays;

class Solution {
    public int solution(int[] num_list) {
        return Arrays.stream(num_list).map(i -> Integer.toBinaryString(i).length() - 1).sum();
    }
}
반응형

댓글