[Python] 코딩 도장 - 10진수를 n진수로 변환하기
Updated:
코딩 도장 사이트의 문제를 직접 풀어본 내용을 정리하여 올립니다.
코딩 도장에서 여러 문제를 확인할 수 있습니다.
난이도 순으로 차근차근 풀어보려 합니다.
[문제: 10진수를 n진수로 변환하기] - Lv.2
다음은 233 이란 10진수를 2진수로 변환하는 과정을 나타낸 그림이다.
위 그림을 참조하여 라이브러리를 사용하지 말고 10진수를 n진수로 변환하는 프로그램을 작성하시오.. (단, n의 범위는 2 <= n <= 16)
예)
-
2진수로 변환 : 233 –> 11101001
-
8진수로 변환 : 233 –> 351
-
16진수로 변환 : 233 –> E9
출처: https://codingdojang.com/scode/458?answer_mode=hide
[풀이]
def f(k,n):
a = []
while k >= n:
a.append(k % n)
k = k // n
a.append(k)
b = ["A", "B", "C", "D", "E"]
for i in range(len(a)):
idx = a[i] - 10
if idx >=0:
a[i] = b[idx]
else:
a[i] = str(a[i])
return print("".join(a[::-1]))
f(233,2)
f(233,8)
f(233,16)
11101001
351
E9
몫이 0이 될 때까지 나머지를 구하는게 중요하고 그 후 나머지를 역순으로 결합하였다.
다만 10진수 이상은 나머지가 두 자리 이상이 될 수 있고 이 경우 알파벳으로 변환하여야 한다.
난 A~E까지 리스트를 만들고 나머지 - 10을 인덱스로 사용해 값을 변환하였다.
[추천 풀이]
def convert(n, base):
T = "0123456789ABCDEF"
q, r = divmod(n, base)
if q == 0:
return T[r]
else:
return convert(q, base) + T[r]
print(convert(233, 2))
print(convert(233, 8))
print(convert(233, 16))
11101001
351
E9
이 분은 재귀 방식을 사용하였고 처음부터 T라는 값의 경우의 수를 전체로 만들어 두셨다.
이를 이용해서 나머지를 인덱스로 사용해서 변환하는 방식을 사용했다.
Leave a comment