문제 설명

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

  • n은 1 이상 100,000,000 이하인 자연수입니다.

작성한 코드

def solution(n):
    base3 = ''
    while(True):
        q, r = divmod(n, 3)
        n = q
        base3 = str(r) + base3
        if q == 0 : break
    reversedBase3 = list(reversed(list(base3)))
    length = len(reversedBase3)
    decimal = 0
    for i, digit in enumerate(reversedBase3) :
        decimal += int(digit) * (3 ** (length - i - 1))
    return decimal

설명

  1. 10진법 n을 3진법 n으로 바꾸는 과정
    • while문을 돌면서 n을 3으로 나눈 나머지를 base3 문자열 앞에 더해준다.
    • 더 이상 나눌 수 없으면 break 한다.
  2. 3진법 n을 뒤집는 과정
    • base3 문자열을 list로 바꾸고 reversed 메소드를 사용한다.
  3. 뒤집은 n을 10진수로 바꾸는 과정
    • list에서 원소 하나씩 앞에서 가져오면서 3의 length - 1 - i 승 * digit을 더해준다.