๋ฌธ์
์ฑ๋ฅ๊ฐ๋น๋ ์ซ์๋ฅผ ๋ํ๋ด๊ธฐ์ ์์ฃผ ์ด์์ ์ธ ๋๊ตฌ์ด๋ค. ๋ณดํต ์ญ์ง์๋ฅผ ์ฑ๋ฅ๊ฐ๋น๋ก ํํํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.

์ฑ๋ฅ๊ฐ๋น์ ๊ฐ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ฑ๋ฅ๊ฐ๋น๋ฅผ ๋ชจ๋ ์ฌ์ฉํด์ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์์ ํฐ ์๋ฅผ ์ฐพ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ํ ์คํธ ์ผ์ด์ค๋ ์ต๋ 100๊ฐ ์ด๋ค. ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ์ฑ๋ฅ๊ฐ๋น์ ๊ฐ์ n์ด ์ฃผ์ด์ง๋ค. (2 ≤ n ≤ 100)
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง ์ฑ๋ฅ๊ฐ๋น๋ฅผ ๋ชจ๋ ์ฌ์ฉํด์ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์์ ๊ฐ์ฅ ํฐ ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ ์ซ์๋ ๋ชจ๋ ์์์ด์ด์ผ ํ๊ณ , ์ซ์๋ 0์ผ๋ก ์์ํ ์ ์๋ค.

๋ฌธ์ ํ์ด
import sys
t=int(sys.stdin.readline())
# ์ฑ๋ฅ๊ฐ๋น ๊ฐ์๋ณ๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์
# 2~7
# numbers=['','','1','7','4','2','0','8']
numbers=[0,0,1,7,4,2,0,8]
# ๊ฐ์ฅ ์์ ์ ๊ตฌํ๊ธฐ
#dp=['9999999999999999999']*(101)
dp=[sys.maxsize]*(101)
# dp init
for i in range(2,8):
if i==6:
# dp[i]='6'
dp[i]=6
else:
dp[i]=numbers[i]
for idx in range(8,101):
for j in range(2,8):
# if int(dp[idx])>int(dp[idx-j]+numbers[j]):
# dp[idx]=dp[idx-j]+numbers[j]
dp[idx]=min(dp[idx], dp[idx-j]*10+numbers[j])
for _ in range(t):
num=int(sys.stdin.readline())
# ๊ฐ์ฅ ํฐ ์ ๊ตฌํ๊ธฐ
largest=''
# ํ์์ผ ๊ฒฝ์ฐ
if num%2==1:
largest+='7'
largest+='1'*(num//2-1)
else:
# ์ง์์ผ ๊ฒฝ์ฐ
largest+='1'*(num//2)
smallest=dp[num]
print(smallest, largest)
- Greedy์ DP๋ฅผ ํฉ์ณ๋์ ๋ฌธ์ ์๋ค.
- ๋จผ์ n๊ฐ์ ์ฑ๋ฅ๊ฐ๋น๋ก ๋ง๋ค ์ ์๋ ์ต๋๊ฐ์ ์์ด๋์ด๋ฅผ ๋ ์ฌ๋ฆฌ๊ธฐ ์ฝ๋ค. ๋จ์ํ ๋ง๋ค ์ ์๋ ์์ ์๋ฆฟ์๋ฅผ ์ ์ผ ๊ธธ๊ฒ ๋๋ ค์ฃผ๋ฉด ํด๋น ๊ฐ์ด ์ต๋๊ฐ์ด ๋๋ค.
- ๊ฐ์ฅ ์ ์ ์์ ์ฑ๋ฅ ๊ฐ๋น(2๊ฐ)๋ก ๋ง๋ค ์ ์๋ ์ '1'๋ก ์ต๋ํ ์๋ฆฟ์๋ฅผ ๋๋ ค์ค๋ค.
- ์ฑ๋ฅ๊ฐ๋น์ ๊ฐ์ num์ด ์ง์์ผ ๊ฒฝ์ฐ, num//2ํ ๋งํผ '1'๋ก ์ฑ์์ฃผ๋ฉด ๋๋ค.
- num์ด ํ์์ผ ๊ฒฝ์ฐ, ์ฒซ ๋ฒ์งธ ์๋ฆฌ๋ง ์ฑ๋ฅ๊ฐ๋น๊ฐ 3๊ฐ ํ์ํ '7'๋ก ์ฑ์์ฃผ๊ณ ๋๋จธ์ง ์๋ฆฟ์๋ ๋ชจ๋ '1'๋ก ์ฑ์์ค๋ค.
- '7'+'1'*(num//2-1)
- n๊ฐ์ ์ฑ๋ฅ๊ฐ๋น๋ฅผ ๋ง๋ค ์ ์๋ ์ต์๊ฐ์ DP๋ฅผ ์ด์ฉํด์ ํ๋ฉด ๋๋ค.
- ์ฑ๋ฅ๊ฐ๋น ๊ฐ์๋ณ๋ก ๋ง๋ค ์ ์๋ ์์ ๊ฐ์ฅ ์์ ๊ฐ์ numbers ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
- ์๋ฅผ ๋ค์ด, numbers[2]๋ ์ฑ๋ฅ๊ฐ๋น 2๊ฐ๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์์ด๋ฏ๋ก 1์ด ์ ์ฅ๋๋ค.
- ๋, numbers[6]๋ ์ฑ๋ฅ๊ฐ๋น 6๊ฐ๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์์ด๋ฏ๋ก 0์ด ์ ์ฅ๋๋ค.
- ํ์ด์ฌ์ ์ ์ ์ต๋๊ฐ์ด ์ ์ฅ๋ sys.maxsize๋ก dp ๋ฐฐ์ด์ ์ด๊ธฐํํ๋ค.
- dp[n]์ n๊ฐ์ ์ฑ๋ฅ๊ฐ๋น๋ก ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ์์ ์์ด๋ค.
- ์ฒ์์ ์ต๊ด์ฒ๋ผ 1e9๋ก ์ด๊ธฐํํ๋ค๊ฐ, ๋์ค์ 10000088888 ์ด๋ฐ ์๊ฐ ๋์์ 1e9๋ก ์ด๊ธฐํํด์๋ ์ฌ๋ฐ๋ฅด๊ฒ min ์ฐ์ฐ์ ์ํํ์ง ๋ชปํด์ sys.maxsize๋ก ์ด๊ธฐํํ๋ค. (์ฝ 9๊ฒฝ ์ ๋์ ์ซ์๋ผ๊ณ ํ๋ค..)
- dp[2]~dp[7]๊น์ง๋ dp[6]๋ฅผ ์ ์ธํ๊ณ , ๋ชจ๋ ํ์๋ฆฌ ์๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ผ๋ก, numbers ๋ฐฐ์ด ๊ฐ๊ณผ ๋์ผํ๋ค.
- dp[6]๋ ์์ ๊ฐ์ฅ ์ ์๋ฆฌ์ 0์ด ์ฌ ์ ์์ผ๋ฏ๋ก numbers[0]์ด ์๋๋ผ 6์ผ๋ก ์ด๊ธฐํํด์ค์ผ ํ๋ค.
- dp[8]๋ถํฐ dp[100]๊น์ง for๋ฌธ์ ๋๋ฉด์ numbers ๋ฐฐ์ด์ ์ ์ฅ๋ ํ ์๋ฆฌ์๋ฅผ ๋ํ๋ผ ์ ์๋ ์ฑ๋ฅ์ ๊ฐ์ 2~7๊ฐ๋ฅผ ํ๋์ฉ ๋ฃ์ด๋ณด๋ฉด์ ์ต์๊ฐ์ ๊ฐฑ์ ํ๋ค.
- ์๋ฅผ ๋ค๋ฉด, ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ๋ค.
- ์ด์ ๊ฐ์ด ์ฑ๋ฅ๊ฐ๋น ๊ฐ์๊ฐ 100์ผ ๋๊น์ง ๋ชจ๋ dp ๋ฐฐ์ด์ ์ฑ์ฐ๊ณ , n์ ์ ๋ ฅ๋ฐ์ ๋๋ง๋ค dp[n] ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด ๋๋ค.
'์๊ณ ๋ฆฌ์ฆ > DP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1351 ๐ฅ] ๋ฌดํ ์์ด (0) | 2023.08.21 |
---|---|
[๋ฐฑ์ค 2169 ๐ฅ] ๋ก๋ด ์กฐ์ข ํ๊ธฐ (0) | 2023.08.20 |
[๋ฐฑ์ค 15989 ๐ฅ] 1, 2, 3 ๋ํ๊ธฐ 4 (0) | 2023.08.18 |
[๋ฐฑ์ค 1943 ๐ฅ] ๋์ ๋ถ๋ฐฐ (0) | 2023.08.16 |
[๋ฐฑ์ค 2631 ๐ฅ] ์ค์ธ์ฐ๊ธฐ (0) | 2023.08.12 |