반응형
LV. Easy 😎
https://leetcode.com/problems/power-of-two/
문제
Given an integer n, return true if it is a power of two. Otherwise, return false.
An integer n is a power of two, if there exists an integer x such that n == 2x.
Example 1:
Input: n = 1
Output: true
Explanation: 20 = 1
Example 2:
Input: n = 16
Output: true
Explanation: 24 = 16
Example 3:
Input: n = 3
Output: false
Constraints:
- -2^31 <= n <= 2^31 - 1
문제 해결법
n의 범위는 int의 범위와 동일 -> int는 4바이트 = 2^32
그러므로 n의 데이터형은 int로도 가능!
n이 1이 될 때까지 계속 2로 나눈다 <- int의 범위이기 때문에 제일 큰 수를 나눠봤자 31번밖에 안 돌리기 때문에 runtime은 신경 쓰지 않아도 됨!!
n을 2로 나눌 때 나머지가 1이 나오는 순간 2의 제곱근이 아니므로 false를 return
n이 1이 될 때까지 나머지가 0이면 2의 제곱근이므로 true를 return
해결 코드
class Solution {
public:
bool isPowerOfTwo(int n) {
//나머지 저장
int rest;
// 음수값은 무조건 false
if (n < 0)
return false;
// 0과 1은 특수 케이스로 빼줌
if (n <= 1)
return n;
while (n != 1) {
rest = n % 2;
// 중간에 2로 나눠떨어지지 못한 경우 false
if (rest == 1)
return false;
n = n / 2;
}
return true;
}
};
728x90
'Computer Science > 알고리즘' 카테고리의 다른 글
leetcode 382) Linked List Random Node (0) | 2022.01.08 |
---|---|
leetcode 143) Reorder List (0) | 2022.01.06 |
leetcode 416) Partition Equal Subset Sum (0) | 2022.01.04 |
leetcode 221) Maximal Square (0) | 2022.01.04 |
leetcode 878) Nth Magical Number (0) | 2022.01.03 |
댓글