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)