n = int(input())
cnt = 1
res = []
res.append(64)
while 1:
if sum(res) == n:
break
a = res.pop()
if a // 2 >= n:
res.append(a // 2)
elif a == 1:
continue
else:
res.append(a // 2)
res.append(a // 2)
print(len(res))
비트마스킹을 어떻게 하는지 몰라서 그냥 풀었다..
n = 23 이라고 가정
일단은 res에 64를 포함
그리고 64를 2로 나눔 -> 32
32 >= 23 이기때문에 res에 32를 넣음
그리고 32를 pop
32 를 2로 나눔 -> 16
16 < 23 이기때문에 res에 16,16 두개를 넣음
이런식으로 계속 나눠서 res에 총합이 n 이 될때까지 반복함
하지만 이문제는 2진수에서 1의 개수가 몇개인지 알아내는것이였다..
23이면 16 + 4 + 2 + 1 -> 10111 , 즉 1이 4개
정답은 4
이런식으로 푸는게 정석인것 같다.
굉장히 비효율적으로 풀은것 같다!..
프로그래머스 2레벨을 풀었다!!
예전엔 프로그래머스 1레벨도 어려웠는데 2레벨 푸는데 20분? 30분?
정도밖에 안풀은것같은 기분?
아무튼 프로그래머스도 좀 해봐야겠다 백준이랑은 완전 다른느낌이다..