문제만 읽으면 어려워 보일 수 있지만
길이가 64인 막대를 자르면, 32, 16, 8, 4, 2, 1로 나눠집니다.(2^5, 2^4, 2^3,,,2의 제곱승)
길이가 X인 막대는 위 길이의 막대들의 조합으로 만들 수 있습니다.
이 말은, 2의 제곱승의 조합으로 X를 만들면 된다는 뜻이고 즉 이진수로 바꿔서 해당 자리 수가 1인 것의 개수를 세면 됩니다.
#include <iostream> #define endl "\n" #define init ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); using namespace std; int main() { init int X; cin >> X; int count = 0; while(X > 0) { if(X % 2) { count++; } X = X >> 1; } cout << count << endl; return 0; }