내 풀이
public int solution(int[] num_list) {
int answer = 0;
for (int i = 0 ;i < num_list.length;i++) {
while(num_list[i] != 1) {
if (num_list[i] % 2 == 0) {
num_list[i] /= 2;
} else {
num_list[i] -= 1;
num_list[i] /= 2;
}
answer++;
}
}
return answer;
}
다른 분들 코드를 좀 보니까 if-else문을 없에도 된다. 왜냐면 어짜피 몫만 가지고 계산할거고 이미 int형이라 몫만 가져갈것이기 때문이다. 그래서 다음과 같이 수정할 수도있다
...
for (int i = 0; i < num_list.length; i++) {
while(num_list[i] != 1) {
num_list[i] /= 2;
answer++;
}
}
....
그리고 이 문제에서 stream 고수님의 소스를 훑어봤는데
toBinaryString()
- 10진수를 2진수로 변경해주는 java apireturn Arrays.stream(num_list)
.map(x -> Integer.toBinaryString(x).length() - 1)
.sum();
2진수로 변경한 값의 자리수를 가지고 연산횟수를 알수 있다는 놀라운사실 !_!