이동하는 거리 N이 주어질 때, 건전지 사용량의 최소값을 구하는 문제이다.
건전지 사용량을 최소화하기 위해선 순간이동을 최대한 많이 해야한다.
현재 위치에서 순간 이동이 가능한 조건은 (현재 위치) x 2가 가능할 때이다.
역으로 생각하면 현재 위치를 2로 나누었을 때 나머지가 0이면 순간이동을, 1이면 한칸 이동을 했음을 의미한다. 따라서 순간 이동을 최대한 많이 사용했을 때 건전지 사용량은 최종 위치 N을 2로 계속 나누어갔을 때 나머지의 합이다.
using System;
class Solution
{
public int solution(int n)
{
int answer = 0;
while (n > 0)
{
answer += n % 2;
n /= 2;
}
return answer;
}
}