[Programmers] Level2 : 점프와 순간이동
Question
Solution
- n이 2의 거듭제곱이라면 점프할 필요가 없다.
- 2의 거듭제곱이 아니면 2로 계속해서 나누었을때 나누어 떨어지지 않을때마다 점프를 하게 된다.
Cord
#include <iostream>
using namespace std;
// 2의 거듭제곱 판별
bool isTwoPower(int n)
{
int temp = 1;
while(true)
{
temp *= 2;
if (temp == n) { return true; }
else if (temp > n) { return false; }
}
}
// n이 2의 거듭 제곱일때 가장 적은 횟수로 이동 가능하다
int solution(int n)
{
int ans = 1;
if (!isTwoPower(n))
{
while(n > 1)
{
if (n % 2 == 1) { ans++; } // 나누어 떨어지지 않으면 점프해야 됨
n /= 2;
}
}
return ans;
}