⚡문제 유형
비트
📝문제
입력값에서 1의 개수를 구해라
📘예시
Input: n = 00000000000000000000000000001011
Output: 3
Explanation: The input binary string 00000000000000000000000000001011 has a total of three '1' bits.
Input: n = 00000000000000000000000010000000
Output: 1
Explanation: The input binary string 00000000000000000000000010000000 has a total of one '1' bit.
Input: n = 11111111111111111111111111111101
Output: 31
Explanation: The input binary string 11111111111111111111111111111101 has a total of thirty one '1' bits.
📗풀이
1. for문 돌리기
간단하게 n을 for문 돌려서 1의 개수를 세어주는 방법이다.
2. 정규표현식
너무..for문만 써서 하기에는 양심에 찔려 이럴때 정규표현식으로 풀어보자해서 풀어봤다.
3. 비트연산자 사용
아마 문제의 의도겠지..?!
n에서 n-1뺀 값이 0이 될 때까지 &연산하면 된다.
이때 &연산을 할 때마다 비트가 1씩 빠진다.
따라서 0이 될 때까지 이 작업을 반복하면 n의 1개수를 알 수 있게 된다.
n | n-1 | n & n-1 | count |
1011 | 1010 | 1010 | 1 |
1010 | 1000 | 1000 | 2 |
1000 | 0111 | 0000 | 3 |
위와 같이 &연산을 하게되면 총 3번의 연산으로 결과가 0000이 나오게 된다.
따라서 1011에 있는 1의 개수는 3개가 된다.
📕코드
//1. 그냥 for문
var hammingWeight = function (n) {
let bin = n.toString(2);
let result = 0;
for (let i = 0; i < bin.length; i++) {
if (bin[i] == 1) result++;
}
return result;
};
//2. 정규표현식
var hammingWeight = function(n) {
let bin = n.toString(2);
let regex = /1/g;
let arr = bin.match(regex); // 0이면 null값이 들어옴
let count = arr === null ? 0 : arr.length;
return count;
};
//3. 비트연산자 사용
var hammingWeight = function(n) {
let count = 0;
while(n) {
n &= n-1
count +=1
}
return count
};
'자료구조&알고리즘 > 알고리즘' 카테고리의 다른 글
[LeetCode][JS] 1779번 Find Nearest Point That Has the Same X or Y Coordinate (0) | 2022.05.27 |
---|---|
[LeetCode][JS] 1281번 Subtract the Product and Sum of Digits of an Integer (0) | 2022.05.26 |
[LeetCode][JS] 231번 Power of Two (3) | 2022.05.24 |
[LeetCode][JS] 120번 Triangle (0) | 2022.05.24 |
[JS][알고리즘] 이진 탐색(Binary Search Algorithm) (4) | 2022.05.09 |