본문 바로가기

알고리즘 & 코딩테스트/코딩테스트

Programmers Lv. 1 "3진법 뒤집기"

Programmers Lv 1 3진법 뒤집기, 월간 코드 챌린지 시즌 1, 정답률 74%

가끔 나오는 '진법 변환'과 문자열 뒤집기가 응용된 문제이다.
문자열 뒤집기는 말 그대로 주어진 문자열을 역순으로 뒤집으면 되서 큰 문제가 되지 않는다.
우리가 눈여겨봐야할 것은 진법 변환에 대한 내용이다. 요것도 자세한 내용은 알고리즘 카테고리의 "진법변환"에서 다룰예정이니 참고해보라. 파이썬에는 아쉽게도 10진수 숫자를 2, 8, 16진수로 표현하는 것 이외의 진법으로 표현하는것엔 달리 방법이 없다. 즉, 직접 구현해야 한다는 말이므로 원리 그대로 진행하자.

import string

def solution(n):
    def convert(num, base):
        tmp = string.digits + string.ascii_lowercase
        q, r = divmod(num, base)
        if q==0:
            return tmp[r]
        else:
            return convert(q, base) + tmp[r]
    
    tmp = list(str(convert(n, 3)))
    tmp = ''.join(tmp[::-1])
    return int(tmp, 3)