본문 바로가기

CS Study/Algorithm(Coding Test)

[Programmers] 이진 변환 반복하기 (Python)

728x90
반응형
 

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

 

programmers.co.kr

 

주어진 이진 숫자에서 0을 제거하고, 제거한 숫자의 길이를 다시 이진 변환하고..

숫자가 1이 될 때까지 이 과정을 반복하는 문제이다!

1이 될 때까지 몇 개의 0을 제거했고, 몇 단계를 거쳤는지 리턴해주면 끝!

 

 

def solution(s):
    answer = []
    cnt = 0 # 제거한 0의 개수
    step = 0 # 회차
    
    while s != "1" :
        step += 1
        new_s = len(''.join(s.split("0")))
        cnt += len(s) - new_s
        
        s = ""
        while new_s != 1 and new_s != 0 :
            s = str(new_s % 2) + s
            new_s //= 2
        s = str(new_s)  + s
        
    answer = [step, cnt]
    
    return answer

 

 

뮤.뮤와 코드 공유를 하는데 뮤.뮤가 python의 bin 내장 함수를 알려주었다!

 

 

Built-in Functions — Python 3.10.3 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer, a floating poin

docs.python.org

 

bin(십진수) -> 10진수를 이진수로 바꿔준다.

단, 이때 앞에 '0b'가 붙어나오므로 슬라이싱해주어야한다.

 

만약 bin으로 바꾼 수를 다시 10진수로 바꾸고 싶다면 int(이진수, 2) 로 변환해주면 된다는 꿀팁!

나는 그냥 이진수 구현을 했는데 시간 제한있는 코딩테스트에서는 bin을 사용하면 실수도 없고, 훨씬 효율적으로 풀 수 있을테니 잘 기억해두어야겠다!

 

728x90
반응형