알고리즘 테스트/프로그래머스 문제풀이 및 해설
<프로그래머스 문제풀이: 이진 변환 반복하기> Level 2 - 파이썬
개발린이
2020. 12. 20. 19:18
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의 개수를 리스트 형태로 반환시켜준다.