Search

[백준 1052] 물병

[백준 1052] 물병

Tip

규칙 찾기
N = 11
물병 개수를 줄이기 위해선?
N을 이진수화해서 1인 자릿수에 1을 더해서 1의 개수 줄이기
이진수화에 bin() 함수 사용
이진수에 1을 더할 때 실질적으로 N에 더해질 수는?
이진수를 뒤집고 1의 인덱스만큼 2를 제곱한 값
이진수 뒤집기엔 [ : : -1] 슬라이스 기능 사용
인덱스 구하기엔 index() 함수 사용
더해야 하는 물병의 최솟값을 구하기 위함으로 같은 1이라도 가장 앞 인덱스를 반환하는 index() 함수를 사용해도 적절

풀이 소스 코드

import sys si = sys.stdin.readline n, k = map(int, si().split()) result = 0 # n을 이진수로 변환했을 때 1의 개수가 k보다 큰 경우 계속 반복 while bin(n).count('1') > k: # 이진수를 거꾸로 뒤집고 1의 인덱스 중 가장 작은 수로 2의 index 제곱한 값이 # 반복마다 추가할 물병의 수 new_bottle = 2 ** (bin(n)[::-1].index('1')) result += new_bottle n += new_bottle print(result)
Python