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) 함수를 다시 적용해 원하는 값을 출력한다.
'알고리즘 문제 풀이' 카테고리의 다른 글
프로그래머스 시저 암호 (Python) (0) | 2022.11.01 |
---|---|
백준 11652번 : 카드 (Python) (0) | 2022.11.01 |
백준 1268번 : 임시 반장 정하기 (Python) (0) | 2022.10.24 |
백준 1026번 : 보물 (Python) (0) | 2022.10.20 |
프로그래머스 행렬의 덧셈 (Python) (0) | 2022.10.19 |
댓글