[백준-1052] 물병
문제
코드
- 참고
링크
넘넘감사합니다..................................................죽어가던절살리셧어요
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진수로 생각했지만, 코드를 짤 때는 잘못 생각했나보다..ㅠㅠ
새롭게 알게된 부분
- 문자열 거꾸로 출력하기
array = 123456
[::-1] 을 하면
array[::-1] = 654321
- 숫자를 다른 진수로 변환
- 2진수로 변환 : bin(숫자)
- 8진수로 변환 : oct(숫자)
- 16진수로 변환 : hex(숫자)
- 다른 진수를 숫자로 변환
- 2진수를 변환 : int(2진수, 2)
- 8진수를 변환 : int(8진수, 8)
- 16진수를 변환 : int(16진수, 16)
Author And Source
이 문제에 관하여([백준-1052] 물병), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@malgam/백준-1052-물병저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)