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