4와 7
난이도
Gold 5
인증
문제
창영이는 4와 7로 이루어진 수를 좋아한다. 창영이가 좋아하는 수 중에 K번째 작은 수를 구해 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 K(1 ≤ K ≤ 109)가 주어진다.
출력
첫째 줄에 창영이가 좋아하는 숫자 중 K번째 작은 수를 출력한다.
예제 입력
1
예제 출력
4
해설 및 후기
이진수를 이용했다. 완전히 이진수로 대응할 순 없지만, 자리수와 그 자리수에서 몇 번째 숫자를 출력해야 하는지만 안다면 이진수로 충분히 구현 가능하다.
제출 코드
n = int(input())
nums = [4,7]
a=1
b=2
ad = 2
bd = 4
sz = 1
def getPrint(sz, th): #sz자리의 th번째 수를 출력
pCnt = 0
res = []
while(th>0):
res.append(nums[th%2])
th //= 2
pCnt += 1
for i in range(sz-pCnt):
res.append(4)
for i in range(1,sz+1):
print(res[sz-i], end='')
while(not (n >= a and n <= b)):
a += ad
b += bd
ad*=2
bd*=2
sz+=1
getPrint(sz, n-a)