문제

https://school.programmers.co.kr/learn/courses/30/lessons/70129

풀이

시도 1

  1. x의 모든 0을 제거합니다.
    • 어차피 문자열이 0과 1밖에 없으므로 현재 길이에서 0의 갯수를 빼면된다. (굳이 0이 빠졌을때 어떤 값이 나오는지 값을 저장하지 않아도 된다.)
  2. x의 길이를 c라고 하면, x를 “c를 2진법으로 표현한 문자열"로 바꿉니다.
    • format(s, ‘b’) -> 2진수로 변환하는 내장함수

solution.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
def solution(s):
    delete_zero_cnt = 0
    while_cnt = 0
    while True:
        if s == "1":
            break
        while_cnt += 1
        zero_cnt = 0
        for char in s:
            if char == "0":
                zero_cnt += 1
        delete_zero_cnt += zero_cnt
        s = len(s) - zero_cnt
        # 이진수로 변환
        s = format(s, 'b')
    return [while_cnt, delete_zero_cnt]


다른사람 풀이

solution.py
1
2
3
4
5
6
7
8
def solution(s):
    a, b = 0, 0
    while s != '1':
        a += 1
        num = s.count('1')
        b += len(s) - num
        s = bin(num)[2:]
    return [a, b]