⚡문제 유형
비트
📝문제
n이 2의 거듭제곱 수이면 true, 아니면 false
📘예시
Input: n = 1
Output: true
Explanation: 20 = 1
Input: n = 16
Output: true
Explanation: 24 = 16
Input: n = 3 //3은 2의 제곱수가 아님
Output: false
📗풀이
& 연산자를 사용합니다.
& 연산자는 AND 비트 연산자로 두 개의 피연산자의 각 자리마다 대응하는 비트가 모두 1일 경우 1을 반환합니다.
예시로 8이 2의 거듭제곱인지 확인 해보겠습니다.
먼저 8과 7을 2진수로 변환합니다.
8과 7을 & 연산자로 계산하면 0000이 나오게 됩니다.
이때 모두 0 이나오면 2의 거듭제곱이고 0이 아닌 수가 나오게 되면 2의 거듭제곱 수가 아닙니다.
이유는 2의 거듭제곱인 수를 다 2진수로 변환하면 제일 앞은 1, 뒤는 전부 0 인것을 알 수 있습니다.
각 수에서 1을 뺀 수는 모든 자리가 1이됩니다.
따라서, n이 2의 거듭제곱일 경우 &연산자의 결과는 전부 0이 나올 수 밖에 없습니다.
📕코드
var isPowerOfTwo = function (n) {
if (n <= 0) return false; // 0이거나 음수면 flase
let result= parseInt(n & (n - 1));
return result === 0 ? true : false;
};
'자료구조&알고리즘 > 알고리즘' 카테고리의 다른 글
[LeetCode][JS] 1779번 Find Nearest Point That Has the Same X or Y Coordinate (0) | 2022.05.27 |
---|---|
[LeetCode][JS] 1281번 Subtract the Product and Sum of Digits of an Integer (0) | 2022.05.26 |
[LeetCode][JS] 191번 Number of 1 Bits (0) | 2022.05.25 |
[LeetCode][JS] 120번 Triangle (0) | 2022.05.24 |
[JS][알고리즘] 이진 탐색(Binary Search Algorithm) (4) | 2022.05.09 |