ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8. 스택을 이용한 진법 변환, 파이썬
    Python/파이썬 자료구조 알고리듬 2019. 6. 3. 09:07
    반응형

    십진수의 진법 변환 (기수 범위: 2~9)

    def change_base(num, base):
        stack = []
        while num > 0:
            stack.append(num % base)
            num = num // base
        result = ''
        for _ in range(len(stack)):
            result += str(stack.pop())
        return result
    
    
    print(change_base(7, 2))  # 111

    * (언패킹 등에서) 사용하지 않는 변수는 _ 을 사용하는 관례가 있습니다. 

     

    스택에 연연하지 않고 파이썬스럽게 코딩한다면... 
    이런 느낌?

    def change_base(num, base):
        stack = []
        while num > 0:
            stack.append(num % base)
            num = num // base
        return ''.join(list(map(str, stack[::-1])))
    
    
    print(change_base(7, 2))  # 111

     

    문자열을 이용한다면.. 
    더 단순하게.. 이런 느낌?

    def change_base(num, base):
        nums = ''
        while num > 0:
            nums = str(num % base) + nums
            num = num // base
        return nums
    
    
    print(change_base(7, 2))  # 111

     

    divmod를 이용한다면..

    def change_base(num, base):
        nums = ''
        while num > 0:
            num, rest = divmod(num, base)
            nums = str(rest) + nums
        return nums
    
    
    print(change_base(7, 2))  # 111

     

    %도 나누기 //도 나누기입니다. 나누기를 1번만 할 수는 없을까요?
    내장 함수(BIF) 중 divmod 함수를 이용하면 됩니다.
    https://wikidocs.net/32#divmod
    (다만 divmod이 나누기를 두 번 하는 것보다 항상 빠른 게 아닙니다. 작은 수에선 더 느림 ㅠ,.ㅠ)
    https://stackoverflow.com/questions/30079879/is-divmod-faster-than-using-the-and-operators

    반응형
Designed by Tistory.