본문 바로가기
알고리즘/프로그래머스

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

by 개발하는 호랑이 2024. 2. 1.

이진 변환 반복하기

 

풀이

주어진 문자열이 '1'이 될 때까지 이진 변환을 반복하면서 반복 횟수와 함께 지운 0의 개수를 반환해야 하는 문제이다.
반복을 몇 번 해야하는지 모르므로 while문을 이용했다.

  1. 제거한 0의 갯수를 입력한 변수 생성 및 while문 생성
  2. while문 안에서 count('0')를 이용해서 0 제거
  3. 1의 갯수만큼으로 다시 2진수로 변환시키니 bin()을 이용하고, 이렇게 하면 0b~~ 로 출력되니 슬라이싱을 이용
  4. 반복 횟수 +1 및 while문에서 나오면 return값을 return 하기
def solution(s):
    count_zero = 0
    i = 0
    while len(s) > 1 and s != '1':
        i += 1
        count_zero += s.count('0')
        s = bin(s.count('1'))[2:]
    return [i, count_zero]

다른 사람 풀이

내가 한 풀이와 별반 다르진 않았다. 다만 count('0') 대신 len(S)-num을 이용했다.
그 외는 동일하다고 보면 된다.

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]