바위타는 두루미
5.1 삽입 본문
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