새소식

🧇 Algorithm/프로그래머스

[코딩테스트 연습] -이진 변환 반복하기 📆

  • -
728x90

📆 월간 코드 챌린지 시즌1

 

문제 설명

0과 1로 이루어진 어떤 문자열 x에 대한 이진 변환을 다음과 같이 정의합니다.

  1. x의 모든 0을 제거합니다.
  2. x의 길이를 c라고 하면, x를 c를 2진법으로 표현한 문자열로 바꿉니다.

예를 들어, x = "0111010"이라면, x에 이진 변환을 가하면 x = "0111010" -> "1111" -> "100" 이 됩니다.

0과 1로 이루어진 문자열 s가 매개변수로 주어집니다. s가 1이 될 때까지 계속해서 s에 이진 변환을 가했을 때, 이진 변환의 횟수와 변환 과정에서 제거된 모든 0의 개수를 각각 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

제한 사항

  • s의 길이는 1 이상 150,000 이하입니다.
  • s에는 '1'이 최소 하나 이상 포함되어 있습니다.

입출력 예

sresult

s result
"110010101001" [3,8]
"01110" [3,3]
"1111111" [4,1]

 

나의 코드

def solution(s):
    zeros, cnt = 0, 0

    while s != "1":
        cnt += 1

        # remove 0s
        tmp = ""
        for c in s:
            if c != "0":
                tmp += c
        num = len(tmp)
        zeros += len(s) - num

        # to binary
        tmp = ""
        while num >= 2:
            tmp = str(num % 2) + tmp
            num //= 2
        tmp = str(num) + tmp
        s = tmp

    return [cnt, zeros]
  • 입출력 예를 제대로 이해하면 해결 자체는 쉬운 문제
  • 반복하면서 0제거와 2진수 변환을 수행
  • bin함수 사용하지 않고 일부러 복습 겸 짜봤는 데, 다음에 더 간결하게 풀어봐야겠다.
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.