[백준1740]파이썬-거듭제곱

2022. 4. 11. 00:15[알고리즘]백준-파이썬

https://www.acmicpc.net/problem/1740

 

1740번: 거듭제곱

3의 제곱수를 생각하자. 3의 0제곱, 3의 1제곱, 3의 2제곱, ... 은 순서대로 1, 3, 9, 27, ... 이 된다. 이를 바탕으로, 한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 수를 생각할 수 있다. 예를

www.acmicpc.net

문제

3의 제곱수를 생각하자. 3의 0제곱, 3의 1제곱, 3의 2제곱, ... 은 순서대로 1, 3, 9, 27, ... 이 된다.

이를 바탕으로, 한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 수를 생각할 수 있다. 예를 들어 30은 27과 3의 합이므로, 이러한 수에 포함된다.

한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 N번째로 작은 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N이 주어진다. N은 500,000,000,000 이하의 자연수이다.

출력

첫째 줄에 한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 N번째로 작은 수를 출력한다.

풀이

처음에는 뭘 해야할지 몰라서 다른 블로그를 참고했다.

입력받은 n을 이진수로 변환해주고 3에다가 1이 있는 자릿수에 거듭제곱을 해줬다.

import sys
input=sys.stdin.readline

n=int(input())
tmp=[]
ans=0
while n>0:
    tmp.append(n%2)
    n//=2
for i in range(len(tmp)):
    if tmp[i]==1:
        ans+=3**i
print(ans)