240708 TIL #445 CT_이진변환반복

김춘복·2024년 7월 7일
0

TIL : Today I Learned

목록 보기
445/571

Today I Learned

오늘은 프로그래머스에서 파이썬 코테 연습!
파이썬은 아직 익숙치 않아 난이도가 낮은 것 부터 시작한다!


CT_이진변환반복

https://school.programmers.co.kr/learn/courses/30/lessons/70129

문제

0과 1로 이루어진 문자열 s에 대한 이진변환은 아래와 같다
모든 s의 0을 제거하고난 뒤 s의 길이를 2진법으로 표현한다.
ex) s="011010" -> "1111" -> "100"
이 과정을 s가 "1"이 될 때 까지 반복했을 때, 이진 변환의 횟수와 제거된 0의 개수를 배열에 담아 return해라.

  • 입력 - 출력
    "110010101001" / [3,8]
    "01110" / [3,3]
    "1111111" / [4,1]

풀이과정

  • 우선 함수에서 횟수를 셀 변수를 2가지 준비한다.

  • 1이 될 때까지 반복해야 하므로 while not b=='1': 구문으로 반복문을 만든다.

  • count("0") 함수를 이용하면 string에서 문자열이 등장한 횟수를 셀 수 있다. 그리고 replace(a, b) 함수를 이용하면 a를 b로 치환이 가능하다. 0을 빈칸으로 교체한다.

  • bin()함수를 이용하면 int값을 2진 문자열로 변환할 수 있다. 다만 접두사 '0b'를 같이 반환하므로 [2:]를 이용해서 잘라준다.

  • 계속 반복문을 돌다보면 1로 수렴하게 되고 count 값들을 리스트에 담아 반환하면 완료!


python 코드

def solution(s):
    count_zero = 0
    count_loop = 0
    b = s
    while not b == '1':
        count_loop += 1
        count_zero += b.count("0")
        b = b.replace("0", "")
        b = bin(len(b))[2:]
    
    answer = [count_loop, count_zero]
    return answer
profile
Backend Dev / Data Engineer

0개의 댓글