10진수 숫자가 주어졌을때, 숫자를 이진수로 변환하고 1이 몇개가 있는지 카운트 하면 되는 문제. 나는 당연히 2진수로 바꾼뒤에 1의 카운트를 세어줬는데 1ms가 걸렸다.
사람들 답에 0ms 가 있어서 확인해봤더니, 비트연산을 사용해서 해결했다.
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
String binaryString = Integer.toBinaryString(n);
int count = 0;
for(int i = 0; i < binaryString.length(); i++){
if(binaryString.charAt(i) == '1'){
count++;
}
}
return count;
}
}
비트 연산 사용
public class Solution {
// you need to treat n as an unsigned value
public int hammingWeight(int n) {
int count = 0;
while(n != 0){
if((n & 1) == 1) count++;
n = n >>> 1;
}
return count;
}
}
그런데 똑같은 코드지만 나는 1ms가 나와서 직접 뭐가 더 빠른지 한번 실험해봤다.
둘다 0.0으로 도출된다. 차이 거의 없음