반응형
문제
문제 해결 방법
-이 문제는 프로그래밍 언어에서 바이너리 구조를 알고 있느냐 묻는 문제입니다.
-C, C++같은 저급언어라면 이 문제를 반드시 알고 있어야 하지만, 자바에서는 굳이 알아야 할 필요는 없다고 생각합니다.
-문제는 unsigned integer이라고 상정하라고 했지만, 자바는 unsigned가 없습니다.
-자바의 bitwise operator인 ‘>>>’와 논리게이트인 ‘&’를 알면 쉽습니다.
자바 연산자 & 란
논리게이트인 AND 연산입니다. 1&1이면 1을 반환 1&0 혹은 0&1이면 0을 반환합니다.
자바연산자 >>> 란
비트를 시프트하는 연산자 입니다. 111이라는 비트가 있으면 오른쪽으로 한칸 옮겨서 011이 됩니다.
시간복잡도: O(), 공간복잡도: O()
https://github.com/eunhanlee/LeetCode_191Numberof1Bits_Solution
public class Solution {
/**
* 주어진 양수 정수의 이진 표현에서 '1' 비트의 개수를 반환합니다.
*
* @param n 양수 정수입니다.
* @return 이진 표현에서 '1' 비트의 개수를 반환합니다.
*/
public int hammingWeight(int n) {
int count = 0; // '1' 비트의 개수를 저장하기 위한 변수입니다.
// n이 0이 될 때까지 반복합니다.
while (n != 0) {
count += n & 1; // n의 가장 오른쪽 비트가 '1'인 경우 count에 해당 비트를 더합니다.
n >>>= 1; // n을 오른쪽으로 1 비트 시프트하여 다음 비트를 확인합니다.
}
return count; // '1' 비트의 개수를 반환합니다.
}
}
자바연산자 >>>와 >>의 차이점
**>>**와 **>>>**는 둘 다 자바에서 사용되는 비트 시프트 연산자입니다. 주요한 차이점은 **>>**가 부호 비트를 유지하면서 시프트하는 반면, **>>>**는 항상 0으로 채워서 시프트하는 것입니다.
아래 링크를 확인해 주세요
반응형
'old > Algorithm Solving' 카테고리의 다른 글
LeetCode 347. Top K Frequent Elements 자바 문제 풀이 (0) | 2023.07.05 |
---|---|
LeetCode 49. Group Anagrams 자바 문제 풀이 (0) | 2023.07.03 |
LeetCode 289. Game of Life 자바 문제 풀이 (0) | 2023.07.03 |
LeetCode 108. Convert Sorted Array to Binary Search Tree 자바 문제 풀이 (0) | 2023.07.03 |
Seating Arrangement 문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.07.02 |