문제 정보
- Leet Code 문제 링크
- 난이도 : Easy
해결 방법
bitwise 연산인 >>> 을 반복적으로 사용하면서 i 번째 자리에 숫자가 존재하는지 여부를 확인하고 2^(n-i) 를 반복해서 더해주는 방법으로 구현했습니다. 다른 제출된 답안들을 확인해 봐도 한 두 가지 방법을 제외하고는 (실제 구현하는 방법은 조금씩 다르겠지만) 컨셉은 비슷했습니다.
소스 코드
// Leet Code
// #190. Reverse Bits
// Success
// Runtime: 103 ms, faster than 33.55% of JavaScript online submissions for Reverse Bits.
// Memory Usage: 40.6 MB, less than 49.41% of JavaScript online submissions for Reverse Bits.
function main(){
// Input // Output
n = 0b00000010100101000001111010011100; // 964176192 (00111001011110000010100101000000)
console.log(reverseBits(n));
}
/**
* @param {number} n - a positive integer
* @return {number} - a positive integer
*/
var reverseBits = function(n) {
let nCopy = n;
let result = 0;
let count = 32;
let exp = 2**31;
while(0 < count){
//console.log(`nCopy:${nCopy.toString(2)} / exp:${exp} / count:${count} / result:${result}`);
if(nCopy & 1) result += exp;
nCopy = nCopy >>> 1;
exp /= 2;
count --;
}
return result;
};
더 알아본 내용
var reverseBitsPractice = function(n) {
//console.log(`toString:${n.toString(2)}`);
//console.log(`join:${n.toString(2).split("").reverse("").join("")}`);
//console.log(`padEnd:${n.toString(2).split("").reverse("").join("").padEnd(32, "0")}`);
return Number.parseInt(n.toString(2)
.split("")
.reverse("")
.join("")
.padEnd(32, "0"), 2);
};
Disscuss 탭에 있던 한줄로 구현된 답인데 궁금해서 더 찾아봤더니 padEnd 라는 메소드로 32자리가 될 때 까지 0을 채워 넣을 수 있습니다. 문제의 의도(?) 에는 부합하지 않겠지만 가장 직관적인 풀이법인 것 같습니다.
참고 자료
'코딩 테스트 연습' 카테고리의 다른 글
[Leet Code Top 100] #322. Coin Change (0) | 2022.01.19 |
---|---|
[Leet Code Top 100] #371. Sum of Two Integers (0) | 2022.01.18 |
[Leet Code Top 100] #70. Climbing Stairs (0) | 2022.01.15 |
[Leet Code Top 100] #268. Missing Number (0) | 2022.01.13 |
[Leet Code Top 100] #338. Counting Bits (0) | 2022.01.13 |