처음에는 DP문제인가 싶어서 주석처럼 풀었다가 시간, 메모리 초과가 나길래 다시 풀었음
n
을 2
로 나누었을 때 나머지가 있다면(홀수라면) 어차피 점프 한 번은 해주어야함. 그래서 ans++
를 해준다.#include <iostream>
#include <vector>
using namespace std;
int solution(int n)
{
int ans = 0;
/*vector<int> v(n+1);
v[0] = 0;
v[1] = 1;
if(n==1) return 1;
for(int i=2;i<=n;i++)
{
if(i%2==0) { // 짝수
v[i] = v[i-1]+1 < v[i/2] ? v[i-1]+1 : v[i/2];
}
else { // 홀수
v[i] = v[i-1]+1;
}
}
ans = v[n];*/
while(n>=1)
{
if(n%2==1) {
ans++;
}
n/=2;
}
return ans;
}