[프로그래머스] 이진 변환 반복하기(python)

.·2022년 6월 19일
0

문제 링크 - https://programmers.co.kr/learn/courses/30/lessons/70129


사고 과정

  • 무한 루프를 돌면서 계속해서 갱신되는 값을 담을 변수를 만들어두고, 문제에서 제시한 조건을 수행했다.
  • 제거한 0의 개수와 이진 변환 횟수를 구하고 s의 길이가 1이 되었을 때 무한 루프를 탈출하여 값들을 리턴하면 끝
  • 이진수로 변환할 때 format을 사용했다. format(변환할 숫자, 'b') 이렇게 하면 이진수로 변환된 문자열을 리턴해준다.
  • format(변환할 숫자, '#b') 이렇게 하면 문자열에 접두어를 붙여 리턴해준다.(#이 없으면 '101010', #이 있으면 '0b101010')

나의 풀이

def solution(s):
    zero_cnt = 0
    cnt = 0
    while True:
        check = ''
        for i in s:
            if i != '0':
                check += i
        zero_cnt += len(s) - len(check)
        check = format(len(check), 'b')

        s = check
        cnt += 1
        if len(s) == 1:
            break
    return [cnt, zero_cnt]

다른 사람의 풀이

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]
  • count를 사용하면 더 깔끔하고 쉽게 풀 수 있었다.

0개의 댓글