본문 바로가기

LeetCode

[LeetCode] - 190. Reverse Bits

   LeetCode는 프로그래밍 문제를 풀며 코딩 실력을 향상할 수 있는 온라인 플랫폼입니다. 다양한 알고리즘 및 데이터 구조 문제를 제공하며, 면접 대비에 유용합니다. 해당 문제는, LeetCode Problems에서 볼 수 있는 난이도 '쉬움 (Easy)' 단계인 "Reverse Bits" 문제입니다.

--> https://leetcode.com/problems/reverse-bits/description/ 

 

문제 : 

Reverse bits of a given 32 bits unsigned integer.

Note : 

   - Note that in some languages, such as Java, there is no unsigned interger type. In this case, both input and output will be given as a signed interger type. They should not affect your implementation, as the integer's internal binary representation is the same, whether it is signed or unsigned.

   - In Java, the compiler represents the signed intergers using 2's complement notation. Therefore, in Example 2 above, the input represents the signed integer -3 and the output represents the signed integer -1073741825.


Example 1 : 

Input :n = 00000010100101000001111010011100

Output : 964176192 (00111001011110000010100101000000)

Explanation : The input binary string 00000010100101000001111010011100 represents the unsigned integer 43261596, so return 964176192 which its binary representation is 00111001011110000010100101000000.

 

Example 2 :

Input : n = 11111111111111111111111111111101

Output : 3221225471 (10111111111111111111111111111111)

Explanation : The input binary string  11111111111111111111111111111101 represents the unsigned integer 4294967293, so return 3221225471 which its binary representation is  10111111111111111111111111111111.

 

Constraints : The input must be a binary string of length 32.


한국어로 간단히 설명하자면, 이 문제는 32비트 부호 없는 정수의 비트를 반대로 뒤집는 함수를 작성하라고 요구하며, 입력과 출력은 32비트 정수로 주어지고, 자바와 같은 언어에서는 부호 있는 정수로 취급됩니다.

 

저는 우선 자바로 이 문제를 접근했으며, 풀이를 보여드리겠습니다 :

public class Solution {
    // you need treat n as an unsigned value
    public int reverseBits(int n) {
        int res = 0;
        for (int i = 0; i < 32; i++) {
            // Extract the least significant bit of n
            int bit = n & 1;
            // Shift this bit to its reversed position and combine with res
            res = (res << 1) | bit; // We can also do (res * 2) instead of (res << 1)
            // Shift n to the right to process the next bit
            n >>= 1;
        }
        return res;
    }
}

 

위와 같이, 우선 int가 32비트라는 것을 인지하고, 32 만큼 for loop을 돌리고, 그 안에서는 매번 n의 최하위 비트를 추출해 오며,  이 비트를 반전된 위치로 이동시키고 res와 결합합니다. 그리고나서, 다음 비트를 처리하기 위해 n을 오른쪽으로 이동시킵니다. 그러다 보면 res라는 정수 변수에는 n의 반전된 이진 표현의 값이 저장되어 리턴합니다.

 

Runtime of my code

 

'LeetCode' 카테고리의 다른 글

[LeetCode] - 27. Remove Element  (2) 2024.07.19
[LeetCode] - 9. Palindrome Number  (1) 2024.07.19
[LeetCode] - 1. Two Sum  (0) 2024.07.18
[LeetCode] - 231. Power of Two  (0) 2024.07.17
[LeetCode] - 191. Number of 1 Bits  (0) 2024.07.17