Bit Counting

Instructions

Write a function that takes an integer as input, and returns the number of bits that are equal to one in the binary representation of that number. You can guarantee that input is non-negative.

Example:

1
The binary representation of 1234 is 10011010010, so the function should return 5 in this case

My Solution

1
2
3
4
5
6
7
8
9
10
11
12
public class BitCounting {
public static int countBits(int n){
int counter = 0;

while (n > 0) {
counter += n % 2;
n /= 2;
}

return counter;
}
}

Better Solution

1
2
3
4
5
6
7
8
public static int countBits(int n) {
int counter = n % 2;

while ((n /= 2) > 0)
counter += n % 2;

return counter;
}

feeling

이번 문제는 개인적으로 깔끔하게 풀렸다고 생각한다.

하지만 Better Solution의 코드가 counter를 초기화 할 때 먼저 연산을 하기 때문에 한 단계 빠를 것 같다.

하지만 개인적으로 Better Solution의 코드는 줄인게 많아서 가독성이 떨어졌다.

번외로 다음과 같이 Integer에서 해당 기능을 하는 메서드가 이미 존재했다.

1
2
3
 public static int countBits(int n) {
return Integer.bitCount(n);
}

물론 Don’t reinvent the wheel 이라지만 이거는 알고리즘 문제를 푸는 의미가 없지 않을까 생각한다…

Share