창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오.
첫째 줄에 K(1 ≤ K ≤ 109)가 주어진다.
첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다.
1
4
2
7
3
44
n = int(input())
s = format(n+1, 'b')
s = s[1:]
print(s.replace('0', '4').replace('1', '7'))
규칙을 찾는 게 관건이었던 문제. n번째를 나타내는 n을 먼저 이진수로 바꾸고, n번째 수를 4는 0으로, 7은 1로 바꿔보면 규칙이 보인다. n의 가장 앞자리를 생략하면 n-1번째 수가 된다.
따라서 n번째 수를 찾으려면 n+1을 이진수로 바꾸고 가장 앞자리를 절삭한 후 0과 1을 다시 4와 7로 바꿔주면 된다.
format() 내장 함수를 이용하면 숫자를 다른 진수의 문자열로 바꿀 때 접두어(0b, 0o, ox 등)를 제외할 수 있다.
>>> format(42, 'b') # 2진수
'101010'
>>> format(42, 'o') # 8진수
'52'
>>> format(42, 'x') # 16진수
'2a'