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();
}
}
반응형
'CodingTest > Programmers' 카테고리의 다른 글
| [프로그래머스] Lv0 배열의 길이에 따라 다른 연산하기 (0) | 2024.10.31 |
|---|---|
| [프로그래머스] Lv.0 문자 리스트를 문자열로 변환하기 (1) | 2023.07.12 |
| [프로그래머스] Lv0 문자열 밀기*** (0) | 2023.02.07 |
| [프로그래머스] Lv0 치킨 쿠폰 (0) | 2023.02.06 |
| [프로그래머스] Lv0 로그인 성공? (1) | 2023.02.02 |
댓글