본문 바로가기
파이썬 코딩테스트/프로그래머스

프로그래머스 / 이진 변환 반복하기 / 파이썬

by S.T.Lee 2022. 9. 13.
def change_s(n):
    answer = ""
    while n > 1:
        if n % 2 == 0:
            answer += "0"
        else:
            answer += "1"
        n = n //2
    answer += "1"
    return answer[::-1]

def solution(s):
    num_zero = 0
    cycle = 0
    while s != "1":
        cycle += 1
        num_zero += s.count("0")
        s = s.replace("0","")
        s = change_s(len(s))
    return [cycle, num_zero]

우선 change_s라는 십진법을 이진법으로 바꿔주는 함수를 만든다.

마지막에 "answer+=str(1)"을 해주는 이유는 결국 n이 1보다 클때까지 실행하기 때문이다. 즉, 1이 항상 남는다.

 

solution 함수의 while문 안에서 count, replace를 안쓰고 만들고 싶었으나 pop을 사용하면 for문의 길이가 바뀌는 에러가 나오기 때문에 하지 않았다. 사실 하고 try except로 빼는것도 생각했다.