n, k = map(int, input().split())
bottle = 0
# 2진수로 변환한 후 1의 개수가 현재 물병의 수
# 그러므로 1의 개수가 K보다 작아야 끝난다.
while bin(n).count('1') > k :
# 뒤에서부터 1의 인덱스를 구한 후
i = bin(n)[::-1].index('1')
# N에 더해주기
n += (2**i)
# 그리고 그만큼 물병 수 증가
bottle += (2**i)
print(bottle)
n, k = map(int, input().split())
i = 0
bottle = 0
while True :
if n <= k :
break
tmp = n // 2
if n % 2 != 0 :
bottle += (2**i)
n = tmp + 1
else :
n = tmp
i += 1
print(bottle)
기존에는 2씩 나누고 반복문을 진행했다.
i가 0부터 시작해서 반복문이 돌아갈 때마다 1씩 더해지도록 했다.
2로 나눠지지 않을 경우 1씩 더하고 2^i를 더해줬다.
나오는 답은 1병으로 만드는 방법이었다.
처음에 2진수로 생각했지만, 코드를 짤 때는 잘못 생각했나보다..ㅠㅠ