๐น 4์ 7
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3 31120kb 40ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
count = [2**i for i in range(31)]
K = int(input())
num = 0
for i in range(1, 31):
num += count[i]
if K <= num:
num_len = i # K๋ฒ์งธ ์ซ์์ ๊ธธ์ด
break
k_location = K - (num - count[num_len])
result = ''
div_num = 2
while num_len:
n = k_location % div_num
if n == 0 or n > (div_num // 2):
result = '7' + result
else:
result = '4' + result
num_len -= 1
div_num *= 2
print(int(result))
3. ํด์ค
๋จผ์ K๋ฒ์งธ ์ซ์์ ๊ธธ์ด๋ฅผ ํ์
ํด์ค๋๋ค. ์ฌ๊ธฐ์๋ num_len
๊ฐ์ฅ ์์ ์๋ฆฌ์ ๋ถํฐ ๊ฐ์ ๊ตฌํด์ค๋๋ค. ๊ฐ ์๋ฆฌ์๋ 4์ 7๋ง ๋ค์ด๊ฐ ์ ์์ผ๋ฏ๋ก ๊ฒฝ์ฐ์ ์๋ 2์ num_len ์ ๊ณฑ๋ฐฐ ์
๋๋ค.
ํ์ธํ๋ ์๋ฆฌ๊ฐ ํ ์นธ ์์ผ๋ก ๊ฐ ๋๋ง๋ค div_num(๋๋์ด์ฃผ๋ ์)์ 2๋ฅผ ๊ณฑํด์ค๋๋ค. ์ด๋ div_num์ผ๋ก ๋๋ ๋๋จธ์ง๊ฐ div_num์ 2๋ถ์ 1๋ฐฐ๋ณด๋ค ์๋ค๋ฉด โ4โ, ํฌ๋ค๋ฉด(ํน์ 0์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ค๋ฉด) โ7โ์ ๊ฐ์ ์ฐ๊ฒฐํด์ค๋๋ค.
K๋ฒ์งธ ์ซ์์ ๊ธธ์ด๋งํผ ๋ฐ๋ณตํด์ฃผ๊ณ ๋ฌธ์์ด๋ก ๋ค๋ค๋ ๊ฐ์ intํ์ผ๋ก ํ๋ณํ ํด์ค๋๋ค.
This post is licensed under CC BY 4.0 by the author.