Python/파이썬 자료구조 알고리듬

8. 스택을 이용한 진법 변환, 파이썬

컴닥 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

반응형