내 코드
def solution(n):
exp = 0
rem = n
while (rem >= 3):
rem = rem / 3
exp += 1
#몫: quo / 나머지: num
quo = 0
answer = []
for i in range(exp, -1, -1):
quo = n // (3**i)
n = n % (3**i)
answer.append(quo)
result = 0
for i in range(exp+1):
result = result + (3**i) * answer[i]
return result
풀이
- while문 이용해서, 숫자를 3으로 계속 나눠서 최대 지수를 구한다.
- 숫자를 3에 최대 지수 승으로 나눠서 3진수를 구하고, 나머지로 계속 나눠준다. 3진수를 배열에 추가한다.
- 배열을 순서대로 3의 0승부터 곱한다. (그럼 자동으로 역순으로 계산된다) 계속 더해준다.
효율적인 코드
def solution(n):
answer = ""
while (n > 0):
n, re = divmod(n, 3)
answer = answer + str(re)
answer = "".join(map(str, answer))
result = int(str(answer), 3)
return result
피드백
- n진수 구하는 방법 :수를 n으로 계속 나누고, 나머지를 마지막부터 차례로 나열한다.
- str은 sort 사용 불가 / reversed 사용
- 문제를 풀때, 해당 로직(소수, 진수 등)을 미리 알고 하면 수월하게 풀 수 있다.
배운 것
- divmod(n, 진수) : 몫과 나머지를 반환해주는 함수
- "".join(reversed(문자열)) : 문자열 뒤집기