코딩테스트 풀이/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;