정신건강상의 이유로 문제는 깊이 해석하지 않는 편이 좋다.
바로 입출력을 보고 생각해보자...
23 => 4
32 => 1
64 => 1
48 => 2
23은 16+4+2+1로 4개
32는 32
48은 32+16
그렇다면 57은? 32+16+8+1로 4개
어라...?이거...이진수로 바꾸면 풀 수 있는거 아니냐...?
57을 만들기위해 1~64까지의 특정한 2의 제곱수들을 더하고 있는데..?
생각해보니 57은 0011 1001이다..
0 * 64 + 1*32 + 1*16 + 1*8 + 0*4 + 0*2 + 1*1 = 57
이거 32+16+8+1이랑 똑같잖아..?
그러면 이진수로 나타냈을 때 1의 개수가 막대의 개수 아니냐..?
#원하는 길이 입력
X = int(input())
#X를 이진수로
#bin(X) : X를 문자열 형태의 이진수로 반환
#1의 개수를 세어보자
#[2:] : bin(X)를 하면 0b가 이진수 앞에 붙기때문에 2번 인덱스부터 1세기
print(bin(X)[2:].count('1'))
#수학
#비트마스킹