-
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반응형