반응형
2의 거듭제곱수 중 하나인 N을 입력받아, N=2x를 만족하는 x 값을 구하는 코드를 작성해 보세요.
if (input <= 0) return
if (input and (input - 1) != 0) return
먼저 입력 값이 0보다 작을 경우와 -1을 해서 2의 거듭제곱이 맞는지 여부를 확인합니다.
이진수 표현했을 때, input - 1을 계산하면, input의 가장 오른쪽에 있는 1비트가 0으로 바뀌고 그 아래 모든 비트가 1이 됩니다.
그다음, input과 input - 1을 비트 AND 연산하면, 결과는 항상 0이 됩니다. 이는 오직 2의 거듭제곱수에서만 성립하는 조건입니다.
var n = input
var x = 0
while (n > 1) {
n /= 2
x++
}
을 2로 나누면서 x값을 계산합니다. n이 1보다 큰 동안 n을 2로 나누고 x값을 증가시킵니다.
반응형