[프로그래머스] Lv.2 이진 변환 반복하기

Jimeaning·2023년 3월 6일
0

코딩테스트

목록 보기
13/143

Python3, 구현(월간 코드 챌린지)

문제

제한 사항

입출력 예시



주요 포인트

s.count('0')

문자열 s 안에 있는 0의 개수를 구한다.

s = s.replace('0', '')

문자열 s 안에 있는 0을 공백으로 치환한다.

s = (bin)(len(s))[2:]

문자열 s의 길이를 이진법으로 바꾸면 0b~로 시작한다
따라서 문자열의 2번째 문자부터 출력해야 원하는 이진값을 얻을 수 있다

최종 코드

def solution(s):
    answer = []
    
    # 제거할 0의 개수
    cnt = 0
    # 0 제거 후 길이
    rmv = 0
    
    while True:
        # 1이 되면 무한 반복 종료
        if s == '1':
            break
            
        rmv += s.count('0')
        s = s.replace('0', '') 
        
        # s에 이진화된 0 제거 후 길이를 넣는다 (0b~로 나오기 때문에 2번째부터 사용)
        s = bin(len(s))[2:]
        
        cnt += 1
                
    answer = [cnt, rmv]
        
    return answer

다른 사람 풀이

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]

어차피 1, 0으로만 이루어진 문자열이므로 전체 길이 - 1의 개수 를 구해도 제거될 0의 개수를 구할 수 있다

profile
I mean

0개의 댓글