[백준/Python] 1052번 - 물병

Sujin Lee·2022년 6월 22일
0

코딩테스트

목록 보기
70/172
post-thumbnail

문제

1052번 - 물병

해결 과정

  • 이진수로 접근하라
  • 물병의 갯수를 이진수로 변환했을 때 1의 갯수가 물을 최대로 합친 후의 물병의 갯수이다. 해당 값이 k보다 작을 때까지 물병을 하나씩 추가한다.
  • 1개씩 추가하면서 코드를 구현해도 되지만 속도가 느리다.
  • 이진수값으로 추가하면서 코드를 구현

시행착오

  • 수학적으로 접근해보기 위해 노력했으나.. 실패
  • 물병의 양이 이진수일 때 1병인 것을 알았음
  • 힌트 획득: 이진수로 접근 bin()

풀이

import sys
n, k = map(int,sys.stdin.readline().split())

bottle = 0
while bin(n).count('1') > k:
  x = 2 ** (bin(n)[::-1].index('1'))
  bottle += x
  n += x
  
print(bottle)
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글