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