바위타는 두루미

5.1 삽입 본문

Study/Interview준비

5.1 삽입

DoRoMii 2019. 8. 2. 19:41
728x90

문제

두 개의 32비트 수 N과 M이 주어지고, 비트 위치 i와 j가 주어졌을 때, M을 N에 삽입하는 메서들을 구현하라. M은 N의 j번째 비트에서 시작하여 i번째 비트에서 끝난다. j번째 비트에서 i번째 비트까지에는 M을 담기에 충분한 공간이 있다고 가정한다. 다시말해 M = 10011라면, j와 i사이에 적어도 다섯 비트가 있다고 가정해도 된다는 것이다. j = 3이고 i = 2인 경우처럼 M을 삽입할 수 없는 상황은 발생하지 않는다. 

 

접근법 

3가지 단계를 거쳐서 문제를 해결할 수 있을 것이다. 

1. N의 i에서 j까지의 비트를 0으로 만든다. 

2. M을 쉬프트해서 j부터 i번 비트자리에 오도록 만든다. 

3. M 과 N을 합한다. 

def updateBits(int n , int m , int j , int i ):
    allOne = ~0
    left = allOne << j
    right = (1 << i) -1
    mask = left | right
    n_clear = n & mask
    m_shift = m << i
    return n_clear | m_shift

'Study > Interview준비' 카테고리의 다른 글

5.3 비트 뒤집기  (0) 2019.08.02
5.2 2진수를 문자열로  (0) 2019.08.02
[개념정리] 비트조작  (0) 2019.08.02
4.12 합의 경로  (0) 2019.07.29
4.11 임의의 노드  (0) 2019.07.29
Comments