자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
n | result |
---|---|
45 | 7 |
125 | 229 |
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
45 | 1200 | 0021 | 7 |
따라서 7을 return 해야 합니다.
n (10진법) | n (3진법) | 앞뒤 반전(3진법) | 10진법으로 표현 |
---|---|---|---|
125 | 11122 | 22111 | 229 |
따라서 229를 return 해야 합니다.
def ternary(number):
q, r = divmod(number, 3)
n = '012'[r]
return ternary(q) + n if q else n
def solution(n):
ter_num = ternary(n)
rev_num = int(str(ter_num)[::-1])
return int(str(rev_num), 3)
머리 식히려고 도전한 문제였는데 생각보다 오래 걸려서 놀랬다.(아마 재귀함수가 익숙치않아서 그런거같다.)
위에 ternary 함수는 3진법으로 바꿔주는 함수이고 솔루션에서 rev_num 부분은 str형으로 바꿔서 앞뒤 번전을 시키고, 3진법 수를 10진법으로 바꾸는 방식으로 해결하였다.
def solution(n):
answer = 0
cnt = 1
a = ''
while n>0:
a+=str(n%3)
n = n//3
print(a)
for b in range(len(a),0,-1):
answer += (int(a[b-1])*cnt)
cnt *= 3
return answer
나머지 정리를 이용해서 찾는 방법이다. 아무래도 이런 문제는 함수를 정의해서 푸는게 빠르게 풀 수 있을 것 같다.