코린이의 소소한 공부노트

[LeetCode/Easy] 190. Reverse Bits 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 190. Reverse Bits

무지맘 2022. 10. 12. 20:03

1. Input

1) 32bit의 unsigned 정수 n

2) 자바를 포함한 몇몇 언어에서는 signed 정수만 취급하기 때문에 맨 앞 bit가 1일 경우 달리 계산될 수 있으니 주의


2. Output

1) n의 비트를 전부 뒤집은 결과를 int 변수에 담아 반환


3. Constraint

1) n은 2진 문자열로 길이는 무조건 32이다.


4. Example

Input: n = 11111111111111111111111111111101
Output:   3221225471

설명:

  - 2진수 문자열 11111111111111111111111111111101은 unsigned 정수 4294967293을 나타낸다.

  - n의 비트를 다 뒤집으면 10111111111111111111111111111111이 되는데, 이는 unsigned 정수 3221225471을 나타낸다.

 위 문제를 signed로 풀면 완전 달라진다.

  - 2진수 문자열 11111111111111111111111111111101은 signed 정수 -3을 나타낸다.

  - n의 비트를 다 뒤집으면 10111111111111111111111111111111이 되는데, 이는 signed 정수 -1073741825

 나타낸다. 


5. Code
1) 첫 코드(2022/07/22)

String s = Integer.toBinaryString(n);
long result = 0;
for(int exp=31 ; exp>=0 ; exp--)
    result += (s.charAt(exp)-'0') * Math.pow(2,exp);
return (int)result;