티스토리 뷰

 

 

14915번: 진수 변환기

변환한 n진수의 수를 출력한다. 11~16 진수의 경우 10 이상의 수는 A~F 문자를 사용한다. 예를 들어, 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F를 사용한다.

www.acmicpc.net

해당 문제는 10진법인 수를 2에서 16진법의 수로 표현하는 문제이다. 어렵다기보다는 내장 모듈이 많은 파이썬 언어의 특성상 이번에도 진수 변환을 해줄 함수를 찾는 와중에 재귀로 구현한 참신한 코드를 발견하고 코드 리뷰를 해보려 한다.

 

먼저 해당 함수 선언은 두 가지 파라미터를 갖고 있다. 10진수의 정수(n), 변환할 base진수(base)

def convert_notation(n, base):

해당 문제는 2, 8, 16진수으로의 변환뿐만 아니라 3이나 7과 같은 진수로도 변환할 수 있어야 한다. 따라서 최대 진수인 16진수의 16진법에 따라 11부터 15에 해당하는 진수로의 변환은 알파벳을 사용한다.

T = "0123456789ABCDEF"

이어서 base진수로 변환해줄 차례다. 학창 시절에 배운 2진수 변환 과정과 동일하게 base진수로 나누어 몫과 나머지를 취하고, 나머지를 다시 base 진수로 나누는 과정을 재귀로 반복하여 최종 정답을 완성한다. 몫과 나머지를 취하는 과정은 divmod()를, 리턴 값은 나머지와 base 진수를 넣고 연산된 값을 붙여준다.

q, r = divmod(n, base)
# 몫이 존재한다면 재귀, 아니라면 나머지에 해당하는 수를 뱉는다.
return convert_notation(q, base) + T[r] if q else T[r]

전체 코드

def convert_notation(n, base):
    T = "0123456789ABCDEF"
    q, r = divmod(n, base)
    return convert_notation(q, base) + T[r] if q else T[r]
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함