넘치게 채우기

[LeetCode] 201. Bitwise AND of Numbers Range 본문

PS/LeetCode

[LeetCode] 201. Bitwise AND of Numbers Range

riveroverflow 2024. 2. 21. 12:33
728x90
반응형

https://leetcode.com/problems/bitwise-and-of-numbers-range/description/

 

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

Leetcode - Bitwise AND of Numbers Range

문제 유형 : 비트마스킹

문제 난이도 : Medium

 

문제

Given two integers left and right that represent the range [left, right], return the bitwise AND of all numbers in this range, inclusive.

정수 left, right가 주어진다. left부터 right까지의 모든 수를 AND연산을 한 값을 구하시오.

 

풀이

5 = 0b101

7 = 0b111

공통 = 0b100

앞쪽 자릿수의 비트들은 중간에서 상쇄된다.

그래서 높은 자릿수쪽에서 공통 비트를 찾으면 되는데, 

쉬프트 연산을 통해서 낮은 자릿수들을 자르면서 확인하는 것이다.

낮은 자리의 비트들을 자르면서 left와 right이 같아질 때 까지 반복하고, 자릿수 체크를 위한 카운트도 누적한다.

left에서 다시 카운트만큼 왼쪽 쉬프트연산을 하면서 자릿수를 복구시킨다.

그 수가 정답이 된다.

 

코드

C++

class Solution {
public:
    int rangeBitwiseAnd(int left, int right) {
        int cnt = 0;
        while(left != right) {
            left >>= 1;
            right >>= 1;
            cnt++;
        }
        return left << cnt;
    }
};

 

Go

func rangeBitwiseAnd(left int, right int) int {
    cnt := 0;
    for left != right {
        left >>= 1
        right >>= 1
        cnt++
    }

    return left << cnt
}
728x90
반응형

'PS > LeetCode' 카테고리의 다른 글

[LeetCode] 787. Cheapest Flights Within K Stops  (0) 2024.02.23
[LeetCode] 997. Find the Town Judge  (0) 2024.02.22
[LeetCode] 268. Missing Number  (0) 2024.02.20
[LeetCode] 231. Power of Two  (0) 2024.02.19
[LeetCode] 2402. Meeting Rooms III  (0) 2024.02.18