[leetCode][JS] 190. Reverse Bits

GY·2021년 11월 15일
0

알고리즘 문제 풀이

목록 보기
70/92
post-thumbnail
post-custom-banner

Description

Reverse bits of a given 32 bits unsigned integer.

Note:

Note that in some languages, such as Java, there is no unsigned integer type. In this case, both input and output will be given as a signed integer 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 integers 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.

Solution

/**
 * @param {number} n - a positive integer
 * @return {number} - a positive integer
 */
const reverseBits = function(n) {
    //convert the number to base2 then stringify, split, and reverse 
    let reversedArray = n.toString(2).split("").reverse()
    //the converted number may not be 32 digits so pad the end 
    while(reversedArray.length <32){ reversedArray.push('0')}
    //join the string, then convert to Integer from base 2
    return  parseInt(reversedArray.join(""),2) 
};
  1. reverse해야 하므로 reverse메서드를 사용할 수 있는 배열로 형변환해준다.
    우선 지난번 문제에서 사용했듯이 toString(2)를 사용해 이진수를 받아오고, 하나씩 요소로 쪼개 배열로 변환한다.
  2. binary string의 길이는 반드시 32이기 때문에, 32 길이가 될때까지 이 배열의 끝에 0을 넣어채워준다.
  3. string을 리턴해야 하므로 배열을 다시 join메서드를 사용해 합쳐준다음, 이진수로 형변환해 리턴한다.

parseInt()

문자열 인자를 구문분석하여 특정 진수의 정수를 반환한다.
parseInt(string, radix);

string

분석할 값. 만약 string이 문자열이 아니면 문자열로 변환(ToString 추상 연산을 사용)합니다. 문자열의 선행 공백은 무시합니다.

radixOptional

string이 표현하는 정수를 나타내는 2와 36 사이의 진수(수의 진법 체계에 기준이 되는 값). 주의하세요-기본값이 10이 아닙니다!

여기서 두번째 매개변수를 사용해 2진수로 형변환할 수 있다.

그런데, 여기서 while(reversedArray.length <32){ reversedArray.push('0')} 를 더 간단하게 바꿀 수 있는 새로운 메서드가 있다.
padStart 메서드를 사용하면 while문을 사용해 조건을 만족할 때까지 0을 푸시한 다음 뒤집는 것이 아니라, 문자열을 뒤집은 다음에 매개변수를 사용해 원하는 길이를 만족할 때까지 문자열 앞쪽에 특정 문자열을 넣어줄 수 있다.


String.prototype.padStart()

문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환한다.

const str1 = '5';

console.log(str1.padStart(2, '0'));
// expected output: "05"

문자열의 길이가 2가 될때까지 0을 앞쪽에 채워넣는다.

str.padStart(targetLength [, padString])

targetLength

목표 문자열 길이. 현재 문자열의 길이보다 작다면 채워넣지 않고 그대로 반환.

padString Optional

현재 문자열에 채워넣을 다른 문자열. 문자열이 너무 길어 목표 문자열 길이를 초과한다면 좌측 일부를 잘라서 넣음. 기본값은 " ". (U+0020)



Reference

profile
Why?에서 시작해 How를 찾는 과정을 좋아합니다. 그 고민과 성장의 과정을 꾸준히 기록하고자 합니다.
post-custom-banner

0개의 댓글