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

 

Lv2 문제이고, 스스로 푼 문제다!

처음에 이진법을 직접구현 하다보니 무한루프가 발생해 시간초과 에러가 났다. 그리고 매번 0을 제거하는 연산을 했는데, 그럴 필요가 없이

루프 때마다 0과 1의 갯수만 세면 된다. 

이진법 직접 구하는게 어려워서 내장함수 bin()을 찾았다. bin(십진수)를 입력하면 '0b[이진수]'를 반환한다. 

그래서 각 단계마다 1의 갯수를 bin()으로 이진법으로 변환한뒤 2번째 인덱스부터 s에 입력하면 된다 

 

주의할 점: 

루프가끝날 때는 1만 남은 경우이므로 1의 갯수가 1이고, 길이도 1일 때로 조건을 달아야한다 

 

- 정답 풀이 :

def solution(s):
    count, zero = 0, 0
    s = list(s)
    one = s.count('1')
    
    while True:
        if one == 1 and len(s) == 1:
            break
        zero += s.count('0')
        one = s.count('1')
        #one를 이진수로 바꾸고 싶다
        s = bin(one)
        s = s[2 : ]
        count += 1
        
    return [count, zero]

 

- 시도해본 풀이 

아마 n이 중복돼서 무한루프에 빠졌던 것 같다 

def solution(s):
    count, zero = 1, 0
    
    while s != '1':
        num = list(s)
        n = num.count('1')
        zero += num.count('0')
        s = ''
        for i in range(n - 1, 0, -1):
            if n % (2 ** i) == 0:
                s += '1'
            else:
                s += '0'
        count += 1
        
    return [count, zero]

+ Recent posts