Post

🐒 4와 7

1. 문제 링크

2877번: 4와 7


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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
"""
[2877] 4와 7

πŸ’› 문제
μ°½μ˜μ΄λŠ” 4와 7둜 이루어진 수λ₯Ό μ’‹μ•„ν•œλ‹€. 
μ°½μ˜μ΄κ°€ μ’‹μ•„ν•˜λŠ” 수 쀑에 K번째 μž‘μ€ 수λ₯Ό ꡬ해 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

πŸ’š μž…λ ₯
첫째 쀄에 K(1 ≀ K ≀ 10^9)κ°€ 주어진닀.

πŸ’™ 좜λ ₯
첫째 쀄에 μ°½μ˜μ΄κ°€ μ’‹μ•„ν•˜λŠ” 숫자 쀑 K번째 μž‘μ€ 수λ₯Ό 좜λ ₯ν•œλ‹€.
"""

# 쀑볡 μˆœμ—΄
from itertools import product

# K번째 μž‘μ€ 수
k = int(input())

"""
λΆ„λͺ… νŒ¨ν„΄μ΄ μžˆλŠ”λ° 이 νŒ¨ν„΄μ„ μ–΄λ–»κ²Œ μ •λ¦¬ν•˜κ³  κ΅¬ν˜„ν• μ§€ κ³ λ―Όν•˜λ‹€κ°€
K+1의 μ΄μ§„μˆ˜μ—μ„œ κ°€μž₯ 큰 자리수λ₯Ό μ—†μ• λ©΄ 맀칭이 λœλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆλ‹€. 
즉, Kκ°€ 5μΌλ•Œ 4와 7둜 λ§Œλ“€ 수 μžˆλŠ” 5번째 μž‘μ€ μˆ˜λŠ” 74인데 μœ„μ˜ κ·Έλ¦Όμ—μ„œ 74λ₯Ό 7을 1둜 ν‘œν˜„ν•˜κ³  
4λ₯Ό 0으둜 ν‘œν˜„ν•œ μ΄μ§„μˆ˜λ‘œ λ³΄μ•˜μ„ λ•Œ 10으둜 λ˜μ–΄μžˆλ‹€. 
μ΄λ•Œ 5+1(=6)의 μ΄μ§„μˆ˜λŠ” 110이고 μ—¬κΈ°μ„œ κ°€μž₯ 큰 자리수인 1을 μ—†μ• λ©΄ 10이 λ‚¨λŠ”λ‹€. 
이 10μ΄λž€ 숫자λ₯Ό λ‹€μ‹œ 1은 7둜, 0은 4둜 λ³€ν™˜ν•΄μ„œ 좜λ ₯ν•΄μ£Όλ©΄ 74κ°€ λœλ‹€.
https://syh39.github.io/algorithm/algorithm_BOJ_2877/
"""

# k + 1 ν•œ ν›„ μ΄μ§„μˆ˜λ‘œ λ³€ν™˜
bin_num = bin(k + 1)

# μ΄μ§„μˆ˜λ₯Ό λ°°μ—΄λ‘œ λ³€ν™˜ + κ°€μž₯ 큰 자리수 μ—†μ• κΈ°
temp = list(map(int, str(bin_num[3:])))

# 1을 7, 0을 4둜 λ°”κΎΌλ‹€
int_num = []
for i in range(len(temp)):
    if temp[i] == 1:
        int_num.append(7)
    else:
        int_num.append(4)

result = ''.join(map(str, int_num))
print(result)


3. ν•΄μ„€

μ²˜μŒμ—λŠ” 쀑볡 μˆœμ—΄λ‘œ λ‹€κ°€κ°”κ³ , while(1) 둜 λŒλ €μ„œ 4와 7둜 λ§Œλ“€ 수 μžˆλŠ” 경우의 수λ₯Ό λ‹€κ°€κ°€λ©΄μ„œ 4와 7만 μžˆμ„ 경우 cnt +=1 ν•΄μ„œ k λž‘ λ˜‘κ°™μ„ λ•Œ return ν•˜λ„λ‘ ν–ˆλ‹€.

ν•˜μ§€λ§Œ λ©”λͺ¨λ¦¬μ™€ μ‹œκ°„ μ΄ˆκ³Όκ°€ 일어남

So, 인터넷에 μ„œμΉ˜ν•΄λ³΄λ‹ˆκΉŒ μš”μƒν•œ μˆ˜ν•™ 곡식 이 μžˆμ—ˆλ‹€.

k+1 을 μ΄μ§„μˆ˜λ‘œ λ§Œλ“  ν›„ κ°€μž₯ 큰 자리수λ₯Ό μ—†μ• κ³  λ‹€μ‹œ 1을 7둜, 0을 4둜 λ³€ν™˜ν•˜μ—¬ μ‹­μ§„μˆ˜λ‘œ λ§Œλ“ λ‹€

문제 풀이 ν•΄μ„λ§Œ μ°Έκ³ ν–ˆκ³  μ½”λ“œ κ΅¬ν˜„μ€ 직접 ν•˜μ˜€λ‹€.

This post is licensed under CC BY 4.0 by the author.