sean.jin
Spark Code Blog
sean.jin
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발공부
      • Kotlin
      • LeetCode
      • Algorithm
      • React
    • 주식차트
    • 책리뷰
    • 유틸리티

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 경제
  • 네마녀의날
  • 오
  • 책
  • 주식투자
  • 책리뷰
  • 변동성
  • 초보
  • 주식책리뷰
  • 쿼드러플위칭데이
  • 아빠와 딸의 주식투자 레슨
  • 부의 추월차선
  • 주식입문자
  • 책추천
  • 자기개발
  • 트리플 위칭데이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
sean.jin

Spark Code Blog

개발공부/LeetCode

[LeetCode] 190. Reverse Bits - JAVASCRIPT 풀이 과정 , 개념 설명 - 비트 연산자

2021. 12. 26. 20:08
반응형

190 - Reverse bits

주어진 32비트 unsigned integer를 역순으로 만들어 리턴하는 문제입니다. 

결과는 아래와 같습니다. 

문제 풀이 전 이해해야 할 것

처음 이문제를 풀때 저는 n값이 이진법으로 이루어진 string이(ex) 010110101) 들어가는 줄 알았는데 콘솔로 확인해보니 정수가 들어가 있는걸 그때 알았습니다. 

그러므로 우리는 32bit 정수상태인 파라미터를 이진 string으로 바꾼 후 그 이진 스트링의 거꾸로 된 값을 찾은 후 그걸 다시 32bit 정수 상태로 반환해야 하는 것입니다. 

 

비트란

위에서 32bit와 이진수들이 나왔는데 두 개념을 이해하기위해 먼저 비트를 이해해야 합니다. 그렇다면 비트는 무엇일까요? 비트는 true(1)와 false(0)로 이루어진 이진법 배열로 정수를 나타냅니다.  

예시를 살펴보겠습니다. 

출저: https://m.post.naver.com/viewer/postView.nhn?volumeNo=10059808&memberNo=29381200&vType=VERTICAL

위와 같이 자리값이 늘어날때마다 2배씩 되며 자릿수에 1이 있다면 해당 자리값을 모두 더해주면 우리가 잘 아는 정수를 0과 1을 통해 나타낼 수 있습니다. 

 

비트 연산자

출저: http://www.tcpschool.com/c/c_operator_bitwise

이 문제에서 쓸 비트연산자는 shift >>연산자와 &연산자입니다.

 

'>>' , '<<' Shift 연산자

 

우선 shift는 자릿수를 이동하는 연산자입니다. shift연산자는 오른쪽 왼쪽 두 방향 모두 있습니다. 부등호가 가리키는 방향이 연산자의 방향입니다. >>오른쪽, <<왼쪽으로 자리이동

 

예시를 보여드리겠습니다. 

 

5라는 값을 3번 왼쪽으로 shift한다고 가정합시다. 

var a = 5, b = 3
console.log(a << b) // a << b = 40

아래 테이블을 보면 왼쪽으로 3번 이동된 101은 이동된자리에 000이 생긴것을 볼 수 있습니다. 101000은 shift를 통해 정수로 40이 됩니다. 

정수 이진법
5 101
40 101000

'&' AND 연산자

And 연산자는 쉬운 이해를 위해 아래 그림을 먼저 확인해보겠습니다.

출저:&nbsp;http://www.tcpschool.com/c/c_operator_bitwise

이처럼 비트 AND 연산자는 대응되는 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환합니다.

 

문제풀이

var reverseBits = function(n) {
  var result = 0; //리턴할 값입니다.
  var count = 32; //32 길이에 이진법만 리턴할수있기때문에 

  while (count--) { //count를 1씩빼며 0이될때까지
    result *= 2;
    result += n & 1; //n & 1은 정수에서 x % 2와 같은 의미입니다. 5%2 = 1
    
    n = n >> 1; // n >> 1 은 x / 2와 같은의미입니다. ex) 5/2 = 2 
       console.log(count)
        console.log(result)
  }
  return result;
};

코멘트를 확인해보시면 n & 1이 x % 2와 같다고 하였는데 왜 그럴까요? 우선 n & 1의 의미는 n과 가장 첫 자릿수 1이 겹치면 값을 리턴하라고 합니다. 우리가 result를 모두 2를 나누다가 1이 남으면 바로 여기서 나머지 값처럼 1이 남게 됩니다. 그래서 이 값을 result에 더해주게 됩니다. 

 

n을 오른쪽으로 한번 이동하면 나누기 2와 같은 역할을 합니다.  

 

마무리

이번 문제는 비트 연산자와 관련된 문제였습니다. 다른 연산자를 더 배우고싶으시다면 아래 링크를 참조해주세요.

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

 

 

반응형

'개발공부 > LeetCode' 카테고리의 다른 글

[JavaScript] 206. Reverse Linked List - 쉬운설명, 인터뷰 필수 문제  (0) 2022.03.06
[JavaScript] 22. Generate Parentheses 풀이과정 쉬운 설명 - backtrack, recursion 활용  (0) 2022.03.06
[Kotlin] 선형리스트를 활용한 문제풀이 LeetCode: Delete Node in a Linked List  (0) 2021.07.09
[Kotlin] indexof 사용법 및 활용 LeetCode: Implement strStr() 쉬운풀이  (0) 2021.06.26
[Kotlin]String에 특수문자 제거, 띄어쓰기 제거(스페이스 제거), String 거꾸로 뒤집기, 소문자로변환 LeetCode :Valid PalindromeSolution  (0) 2021.06.24
    '개발공부/LeetCode' 카테고리의 다른 글
    • [JavaScript] 206. Reverse Linked List - 쉬운설명, 인터뷰 필수 문제
    • [JavaScript] 22. Generate Parentheses 풀이과정 쉬운 설명 - backtrack, recursion 활용
    • [Kotlin] 선형리스트를 활용한 문제풀이 LeetCode: Delete Node in a Linked List
    • [Kotlin] indexof 사용법 및 활용 LeetCode: Implement strStr() 쉬운풀이
    sean.jin
    sean.jin
    앱개발, 알고리즘, JS, Kotlin, 미국 취업준비

    티스토리툴바