테스트 사이트 - 개발 중인 베타 버전입니다

파이썬 n진수 채택완료

BAYER 4년 전 조회 1,467

10진수를 변수 num에 n진법을 변수 base에 입력받아서 10진수를 n진수로 변환하는 함수를 파이썬으로 어떻게 작성하나요

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
I
4년 전

안녕하세요? ^-^

 

파이썬을 활용하여 10진수를 n진수로 변환하는 방법은 여러 가지가 있지만,

 

크게 재귀함수를 사용하는 방법과 일반적인 풀이법이 있습니다 :)

 

 

파이썬에서는 divmod()와 언패킹을 사용하면 진법 관련 함수를 보다 간단히 처리할 수 있습니다.

 

우선 재귀함수를 사용하면 다음과 같이 해결할 수 있습니다!

 

</p>

<p><code>def</code> <code>convert(num, base):</code></p>

<p><code>    </code><code>C </code><code>=</code> <code>"0123456789ABCDEF"</code></p>

<p><code>    </code><code>q, r </code><code>=</code> <code>divmod</code><code>(num, base)</code></p>

<p><code>    </code><code>if</code> <code>q </code><code>=</code><code>=</code> <code>0</code><code>:</code></p>

<p><code>        </code><code>return</code> <code>C[r]</code></p>

<p><code>    </code><code>else</code><code>:</code></p>

<p><code>        </code><code>return</code> <code>convert(q, base) </code><code>+</code> <code>C[r]</code></p>

<p>

 

 

일반적으로 재귀함수를 사용하는 주된 목적이 작성 및 이해가 직관적이라는 점인데,

 

제 개인적인 생각으로는 위 함수가 직관적인지는 다소 의문입니다 ^^;

 

그리고 대체로 코딩 테스트에서 재귀함수는 퍼포먼스 측면에서 좋은 점수를 받지는 못하는 경향이 있습니다 ㅠㅠ

 

 

재귀함수를 사용하지 않는다면 다음과 같이 작성할 수 있습니다 ^^

 

</p>

<p>def convert(num, base):

    result = ''

    C = 'ABCDEFG'

    while num > 0:

        num, rem = divmod(num, base)

        if rem < 10:

            rem_str = str(rem)

        else:

            rem_str = C[rem - 10]

        result = rem_str + result

    return result</p>

<p>

 

 

그럼 즐거운 불금 & 주말 되세요 :)

 

 

+)

연산자를 직접 사용하는 방식과 divmod()를 사용하는 방식의 퍼포먼스 차이에 관해서는 아래의 문답을 확인하세요 ^^

https://stackoverflow.com/questions/30079879/is-divmod-faster-than-using-the-and-operators

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인