본문 바로가기
알고리즘 문제 풀이

백준 1740번 : 거듭제곱 (Python)

by 로널드 피셔 2022. 10. 26.

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

n = int(input())
print(int(bin(n)[2:], 3))

한 개 이상의 서로 다른 3의 제곱수의 합으로 표현되는 숫자들을(1, 3, 4, 9, 10, 12, 13 ... ) 3진법으로 써보면

1, 10, 11, 100, 110, 111 ....

이런 형태가 된다. '서로 다른' 3의 제곱수를 합해야하므로 자릿수는 2가 될 수 없다.

그런데 이 수열은 곧 1부터의 자연수를 2진법으로 나타냈을 때와 모양이 같다.

즉, 주어진 조건을 만족하는 n번째로 작은 수는 n을 2진법으로 변환하고 그 값을 3진수로 간주해 10진법으로 변환한 값이다.

(ex 5번째로 작은 수 -> 5를 2진법으로 변환 = 101 -> 3진수 101을 10진수로 변환 -> 10)

bin(n) 함수는 n을 2진수로 변환해 문자로 출력한다.변환된 수는 공통적으로 2진수임을 나타내는 0b가 앞에 붙는다.[2: ] 슬라이싱으로 앞의 0b를 떼어내고, 주어진 n진수를 10진수로 변환하는 int('정수', n) 함수를 다시 적용해 원하는 값을 출력한다.

댓글