본문 바로가기

old/Algorithm Solving

LeetCode 191. Number of 1 Bits 자바 문제 풀이

반응형

문제

Number of 1 Bits - LeetCode

문제 해결 방법

-이 문제는 프로그래밍 언어에서 바이너리 구조를 알고 있느냐 묻는 문제입니다.

-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으로 채워서 시프트하는 것입니다.

아래 링크를 확인해 주세요

자바연산자 >>>와 >>의 차이점

반응형