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
첫번째 인자는 문자열로 입력해 주어야 합니다.
'프로그래밍 > 코딩 테스트' 카테고리의 다른 글
[코테] 신고 결과 받기 ( Lv.1 (39%)) (0) | 2024.10.05 |
---|---|
[코테] 순위 Lv.3 (40%) (0) | 2024.02.19 |
[코테] 콜라 문제 Lv. 1 (67%) (0) | 2023.08.31 |
[코테] 옹알이 (1) Lv. 0 (32%) (0) | 2023.08.27 |
[코테] 정수를 나선형으로 배치하기 Lv. 0 (45%) (0) | 2023.08.27 |
댓글