Level 2. くりかえしにしんへんかん


くりかえしにしんへんかん


練習エンコーディング>月次コードフィルタ第1四半期>繰返しバイナリ変換
https://programmers.co.kr/learn/courses/30/lessons/70129

問題の説明


# 문제 정리

- 입력: 이진수 문자열
- 과정:
  1. 변환 횟수와 해당 과정에 있어 발생하는 '0'의 갯수의 초기값을 0,0으로 설정한다.
  2. while문을 이용하여 입력한 이진수 문자열의 값이 '1' 이 될 때 까지
    1) 해당 단계에서 문자열의 '0'개수를 구하여 더한다.
    2) 해당 단계에서 문자열의 '1'개수를 구하여 bin()[:2]한다. 이 때, [:2]를 취함은 bin()을 적용 시 '0bxxxx'형태로 나타나기 때문이다. 다른 방법으로는 format(n,'b')가 있다.
    3) 변환 횟수에 1을 더한다.
  3. 위의 과정을 종료한 후 변환 횟수와 해당 과정에 있어 '0'의 개수를 리스트 형태로 출력한다.

問題を解く

# Input value
s = "110010101001"
cnt, zero = 0,0 # Set initial value: cnt:number of transform, zero: number of '0' value
while s != '1': # Before s = '1'
    zero += s.count('0') # Count number of '0'
    s = bin(s.count('1'))[2:] # Consider bin()[2:] because bin() = '0bxxxx'
    cnt += 1 # Count number of transform
[cnt,zero]    
これは簡単な問題です.

完全なコード

def solution(s):
    [cnt, zero] = [0, 0]
    while s != '1': 
        zero+=s.count('0')
        # s = format(s.count('1'),'b')
        s = bin(s.count('1'))[2:]
        cnt+=1
    return [cnt, zero]