본문 바로가기
프로그래밍/코딩 테스트

n진법으로 변환하는 함수

by Devry 2023. 10. 1.

10진법 -> n진법 구현

10보다 작은 n진법으로 변화하는 함수는 다음과 같습니다.

# n이 10보다 작을 때
def to_nbase(num, n):
    s = ""
    while num != 0:
        s = str(num % n) + s
        num //= n
    return s

n으로 나눈 나머지를 앞쪽부터 쌓아 올립니다.

몫이 0이 될 때까지 진행한 값을 반환하면 n진법으로 변환한 숫자가 됩니다.

하지만 10보다 큰 n진법으로 변환할 때에는 다른 함수가 필요합니다.

10진법 표현으로는 11,12와 같은 숫자를 한자리 수로 표현할 수 없기 때문에 알파벳을 추가하여 나타내게 됩니다.

# n이 10보다 클 때(36까지)
def to_nbase(num, n):
    chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    mod_dict = {i: chars[i] for i in range(len(chars))}
    s = ""
    while num != 0:
        s = mod_dict[num%n] + s
        num //= n
    return s

첫번째 함수와 로직은 같고 쌓아올릴 때 mod_dict에서 대응하는 문자를 선택하는 차이입니다.


10진법 -> n진법  (내장 함수 사용)

직접 구현하는 방법 외에도 내장 함수를 사용하는 방법이 있습니다.

bin(12)    # 0b110
oct(12)    # 0o14
hex(12)    # 0xc

앞부분에 붙는 0b를 제거하시고 사용하시면 됩니다.


n진법 -> 10진법 구현

n진법을 다시 10진법으로 변환하는 함수

def nbase_to_dec(num, n):
	chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    mod_dict = {chars[i]: i for i in range(len(chars))}
    digits = []
    for i, c in enumerate(num[::-1]):
    	digits.append(mod_dict[c] * n**i)
    return sum(digits)

n진법 -> 10진법 (내장 함수 사용)

파이썬 내장함수 int의 인자로 n을 넘겨주면 10진법으로 쉽게 변환할 수 있습니다.

int("112",5)    # 32

첫번째 인자는 문자열로 입력해 주어야 합니다.

 

  출처: 코테에 입문하시나요? 이 문제부터 시작해보세요

 

댓글