https://leetcode.com/problems/number-of-1-bits/description/
1. 최하위 1지우는법
n=n&(n-1) 하면 된다.
ex) 11 & 10 == 10으로 최하위 1이 지워진다.
2. 1갯수 세는법
i) n을 2진수로 바꾸는 로직을 이용하면 된다.
ii) 최하위 1을 계속 지우고 cnt++ 하면된다. n이 1이상인동안
3. 전체코드
i)
class Solution {
public:
int hammingWeight(int n) {
//cout<<(1<<31);
int ret=0;
while(n){
ret+=(n%2);
n/=2;
}
return ret;
}
};
ii)
class Solution {
public:
int hammingWeight(int n) {
int cnt=0;
while(n){
n=n&(n-1);
cnt++;
}
return cnt;
}
};
'Algorithm > 비트마스킹' 카테고리의 다른 글
[알고리즘] 백준 17471 게리멘더링 // 비트마스킹, dfs 구역체크는 노드1곳에서 시작 (0) | 2025.01.08 |
---|---|
[알고리즘] 백준 1285 동전뒤집기 // 비트마스킹, 상태가 2개면 비트마스킹을 생각 (0) | 2025.01.08 |
리트코드 a+b c++ // 비트연산 덧셈구현방법 (0) | 2024.05.18 |
프로그래머스 2개이하로다른비트 c++ // 비트마스킹, 관찰, 규칙성발견 (0) | 2024.04.14 |
프로그래머스 메뉴리뉴얼 c++ // 비트마스킹 조합 (0) | 2024.01.08 |