이진법

    [python] 백준 - 1052. 물병

    [python] 백준 - 1052. 물병

    🤔문제 해결 S1 | 이진법 물의 양이 1, 2, 4, 8, 16, ... 이렇게 증가하므로 이진수처럼 생겼다. 같은 수를 더하면 다음 수 하나가 나온다. 이진수로 보면 ex) 100 + 100 = 1000 예시로 설명해보자면 N = 11 일 때 물병: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 물병합: 2, 2, 2, 2, 2, 1 물병합: 4, 4, 2, 1 물병합: 8, 2, 1 물병은 결국 3개가 된다. 11을 이진수로 바꾸면 1011 이다. 결국 1의 개수가 다 합쳤을 때의 물병의 개수가 된다. 그럼 1의 개수를 줄이고 싶으면 이진수 덧셈을 이용한다. 1011(11) + 0001(1) => 1100(12) 1100(12) + 0100(4) => 10000(16) 🚀 이진수를 잘 이..

    [python] 프로그래머스 - 이진 변환 반복하기(월간 코드 챌린지 시즌1)

    [python] 프로그래머스 - 이진 변환 반복하기(월간 코드 챌린지 시즌1)

    🤔문제 해결 '0'이 제거된 갯수도 필요하기 때문에 '0'의 개수를 저장 s의 길이에서 0의 개수를 빼주면 '1'로 구성된 s의 길이가 나옴 그 길이를 2진법으로 표현 1-3 반복 💨 아마 월코챌 1번 문제였던거 같다. 💻소스 코드 def solution(s): cnt, removed_zero_cnt = 0, 0 while s != '1': # 1. x의 모든 0을 제거한다. zero_cnt = s.count('0') # 2. x의 길이를 c라고 하면, x를 "c를 2진법으로 표현한 문자열"로 바꾼다. s = bin(len(s) - zero_cnt)[2:] cnt += 1 removed_zero_cnt += zero_cnt return [cnt, removed_zero_cnt] 📕문제 확인 출처: 프로그..