본문 바로가기
CodeSignal

Kill K-th Bit

by Doromi 2024. 2. 22.
728x90
반응형

 주어진 수의 이진 표현에서 특정 위치의 비트를 변경하는 것입니다. 특히, 주어진 수 n의 이진 표현에서 오른쪽에서 k번째 비트가 0으로 설정되어 있었지만, 현재 그 값이 다를 수 있습니다. 이 비트를 다시 0으로 변경하는 함수를 작성해야 합니다.

예를 들어, n = 37이고 k = 3인 경우, 주어진 수의 이진 표현은 100101입니다. 이때, 3번째 비트를 0으로 변경하면 100001이 되어 10진수로는 33이 됩니다.

def solution(n, k):
    return n & ~(1 << (k-1))
1 << (k - 1): 이 부분은 1을 k-1만큼 왼쪽으로 시프트하는 연산입니다. 예를 들어, k가 3이면 이 값은 이진으로 00001000이 됩니다. 즉, k번째 비트만 1이고 나머지는 모두 0인 값을 만듭니다.

~(1 << (k - 1)): 여기서는 ~(tilde) 연산자를 사용하여 위에서 구한 값을 비트 단위로 반전시킵니다. 이는 1을 0으로, 0을 1로 변경합니다. 따라서 결과적으로 k번째 비트만 0이고 나머지는 모두 1인 값을 얻습니다.

n & ~(1 << (k - 1)): 이제 이전 두 단계에서 생성된 값을 n과 비트 단위로 AND 연산합니다. AND 연산은 두 비트가 모두 1일 때만 결과가 1이 되므로, k번째 비트가 0인 값이 됩니다. 즉, n에서 k번째 비트만 0으로 변경되고, 나머지 비트는 n의 값과 동일합니다.
728x90
반응형

'CodeSignal' 카테고리의 다른 글

firstNotRepeatingCharacter  (0) 2024.02.27
Count Sum of Two Representations 2  (1) 2024.02.26
Tennis Set  (0) 2024.02.20
Late Ride  (0) 2024.02.06
Circle of Numbers  (0) 2024.02.05