자르고 붙이고 자르고 붙이고 반복문을 통해 구현을 하는 내용이다.
라고 생각할 수도 있지만 위 문제의 분류에는 수학이 포함되어있다.
문제 설명대로 풀면 합을 계산하고 현재 가장 작은 막대기를 계산하고 해야 하지만
위 문제는 2진법에 관한 문제이다.
23의 경우 2진법으로는 16 + 4 + 2 + 1의 합으로 10111 이고 여기서 1의 개수는 4개이다
64나 32 같은 경우는 1000000 과 100000 이므로 1의 개수는 1이다.
따라서 목표값 X를 2진수로 바꾸고 1의 개수를 세면 된다.
#include <iostream>
using namespace std;
int main()
{
int target;
int count = 0;
cin >> target;
for (;target != 0; target >>= 1 )
if (target % 2)
count++;
cout << count;
return 0;
}
2019-01-10 10:00:00에 Tistory에서 작성되었습니다.