1052.물병
1052번: 물병
지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려고 한다. 지민이는 한 번
www.acmicpc.net
- 풀이
- N의 이진수 값의 1의 개수는 물병 수
- 물병 수가 k개 이하이면 더 구매할 필요 없음
- 2^i 값은 물병의 리터값이 된다
- 구매해야 하는 물병 양
- 보수 개념 이용
- ex) 13,1
- 1101(2) -> 왼쪽에서부터 보면서 1개가 구해지면 그위치 값 1000(2) - 101(2)
- N의 이진수 값의 1의 개수는 물병 수
#같은 양의 물 -> 합칠 수 있음
#상점에서 1L 물병 구매가능
#비어있지 않은 K개이하의 물병을 만들기위해 구매해야할 물병 최소개수
n,k=map(int,input().split())
bottle=0
result=-1
lst=list(reversed(format(n,'b').rstrip()))
if lst.count('1')<=k:
result=0
else:
for i in range(len(lst)-1,-1,-1):
if lst[i]=='1':
bottle +=1
if bottle==k:
result=2**i - sum([2**int(j) for j in range(0,i) if lst[j]=='1'])
break
print(result)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][누적합] 16507. 어두운 건 무서워 (0) | 2023.08.30 |
|---|---|
| [백준][그리디] 14247. 나무 자르기 (1) | 2023.08.30 |
| [백준][다익스트라] 5972. 택배 배송 (0) | 2023.08.22 |
| [백준][sliding window] 20437. 문자열게임2 (0) | 2023.08.22 |
| [백준][구현] 15927.회문은 회문아니야!! (0) | 2023.08.12 |