프로그래머스lv2 정답률74% 이진변환

BABY CAT·2022년 10월 6일
0

coding test

목록 보기
2/17

https://school.programmers.co.kr/learn/courses/30/lessons/70129?language=python3

코테가 이런거구나
레벨2 문제도 엄청 어렵네

#나의 풀이
def solution(s): 
    llist=[] 
    countzero=[]
    def Fsolution(s):
        llist.append(1)
        ll=[]
        for i in s:
            if int(i) != 0:
                ll.append(i)
            else:
                countzero.append(1)
        lllen = len(ll)  # 6
        num = lllen
        save = []
        while True:
            a = int(num / 2)
            b = int(num % 2)
            save.insert(0, b)
            if a != 0:
                num = a
            else:
                break
        final = ''.join(map(str, save)) #이진수 100
        #print(final)
        if int(final) != 1 :
            Fsolution(str(final))
        else:
            pass
    Fsolution(s) #함수실행
    return len(llist), len(countzero)

구글링으로 이진수 변환 코드를 딴 후 재귀용법을 활용했다.
다른 사람 정답 보니까 아주 간단하게 풀었더라.

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]

while : s가 1이 아니면 무한루프
루프 한 번 돌때마다 a에 +1 리턴a를 손쉽게 카운트
렌s에서 넘을 빼서 0 개수를 카운트해서 b에 누적
bin(num) 은 0b로 시작하기 때문에 2인덱부터 슬라이스

0개의 댓글