출처: https://meyouus.tistory.com/64 [정보 공유 - For Me For You For Us]
본문으로 바로가기

이것도 간단해 보이는 문제였지만, while문을 쓸까 단순 함수 recursion을 쓸까 고민하다가 함수 재귀를 사용하여 푼 문제이다.

def solution(s):
    def turning(a, zero_count, r):
        if a == '1':
            return [r, zero_count]
        else:
            zero_count += a.count('0')
            a = format(a.count('1'), 'b')
            r += 1
            return turning(a, zero_count, r)
    answer = turning(s, 0, 0)
    return answer

문제에서는 해당 문자열이 단순 '1'로 바뀔 때까지 반복 실행해주라고 했으므로, 이외의 경우에는 계속 실행해주는 재귀 함수를 짜보았다. 굳이 문자열 '0'을 없애지 않고, 먼저 '0'의 개수를 세어주고 더해주고, 단순히 '1'의 개수만 파악해 주어진 문자열을 덮어씌어주고, 횟수 카운트를 늘려주고, 이를 다시 반복한다. 마지막에 주어진 문자열이 '1'로 바꼈을 경우, 이제는 반복을 멈추고, 반복 횟수와 없어진 0의 개수를 리스트 형태로 반환시켜준다.