[๋ฐฑ์ค 14916๋ฒ] [๐ฅ5] ๊ฑฐ์ค๋ฆ๋ (python)
๋ฌธ์
์ถํฅ์ด๋ ํธ์์ ์นด์ดํฐ์์ ์ผํ๋ค.
์๋์ด 2์์ง๋ฆฌ์ 5์์ง๋ฆฌ๋ก๋ง ๊ฑฐ์ค๋ฆ๋์ ๋ฌ๋ผ๊ณ ํ๋ค. 2์์ง๋ฆฌ ๋์ ๊ณผ 5์์ง๋ฆฌ ๋์ ์ ๋ฌดํ์ ๋ง์ด ๊ฐ์ง๊ณ ์๋ค. ๋์ ์ ๊ฐ์๊ฐ ์ต์๊ฐ ๋๋๋ก ๊ฑฐ์ฌ๋ฌ ์ฃผ์ด์ผ ํ๋ค. ๊ฑฐ์ค๋ฆ๋์ด n์ธ ๊ฒฝ์ฐ, ์ต์ ๋์ ์ ๊ฐ์๊ฐ ๋ช ๊ฐ์ธ์ง ์๋ ค์ฃผ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, ๊ฑฐ์ค๋ฆ๋์ด 15์์ด๋ฉด 5์์ง๋ฆฌ 3๊ฐ๋ฅผ, ๊ฑฐ์ค๋ฆ๋์ด 14์์ด๋ฉด 5์์ง๋ฆฌ 2๊ฐ์ 2์์ง๋ฆฌ 2๊ฐ๋ก ์ด 4๊ฐ๋ฅผ, ๊ฑฐ์ค๋ฆ๋์ด 13์์ด๋ฉด 5์์ง๋ฆฌ 1๊ฐ์ 2์์ง๋ฆฌ 4๊ฐ๋ก ์ด 5๊ฐ๋ฅผ ์ฃผ์ด์ผ ๋์ ์ ๊ฐ์๊ฐ ์ต์๊ฐ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฑฐ์ค๋ฆ๋ ์ก์ n(1 โค n โค 100,000)์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฑฐ์ค๋ฆ๋ ๋์ ์ ์ต์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค. ๋ง์ฝ ๊ฑฐ์ฌ๋ฌ ์ค ์ ์์ผ๋ฉด -1์ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
13
์์ ์ถ๋ ฅ 1
5
์์ ์ ๋ ฅ 2
14
์์ ์ถ๋ ฅ 2
4
ํ์ด
์ ์ n์ด ์ฃผ์ด์ก์ ๋, 5์์ง๋ฆฌ ๋์ ๊ณผ 2์์ง๋ฆฌ ๋์ ๋ง์ ๊ฐ์ง๊ณ n์์ ๋ง๋ค ๋, ํ์ํ ๋์ ๊ฐ์์ ์ต์๊ฐ์ ๊ตฌํ๋ ๋ฌธ์ ๋ก ๋ง์ฝ n์์ ๋ง๋ค ์ ์๋ค๋ฉด -1์ ์ถ๋ ฅํด์ผ ํ๋ค.
์ฐ์ 5์์ง๋ฆฌ ๋์ ์ ๊ฐ๋ฅํ ํ ๋ง์ด ์ฌ์ฉํด์ผ๋๊ณ ๋ง์ฝ n์ด 5์ ๋ฐฐ์์ด๋ฉด, 5์์ง๋ฆฌ ๋์ ๋ง์ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ธ์ก์ ๋ง๋ค ์ ์๋ค. ์ด ๊ฒฝ์ฐ, ํ์ํ ๋์ ์ ๊ฐ์๋ n // 5 ์ด๋ค.
๋ง์ฝ n์ด 5์ ๋ฐฐ์๊ฐ ์๋๋ฉด, 5์์ง๋ฆฌ ๋์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก 2์์ง๋ฆฌ ๋์ ์ ์ฌ์ฉํด์ผ ํ๋ค. ์ด๋๋ n์์ 2์์ฉ ๋นผ๋ฉด์ 5์์ง๋ฆฌ ๋์ ์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๊ฐ๋ฅํ ํ ๋ง์ด 2์์ง๋ฆฌ ๋์ ์ ์ฌ์ฉํ๋ค. ๋ง์ฝ ์ด ๊ณผ์ ์์ n์ด ์์๊ฐ ๋๋ฉด ์ํ๋ ๊ธ์ก์ ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ด๋ฏ๋ก -1์ ์ถ๋ ฅํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ์ต์ํ์ ๋์ ๊ฐ์๋ก ์ํ๋ ๊ธ์ก์ ๋ง๋ค ์ ์๋ค.
์ฝ๋
ver(1) - Greedy ์ฌ์ฉ
# ์ ์ n์ ์
๋ ฅ๋ฐ์ต๋๋ค.
n = int(input())
# ํ์ํ 5์ 2์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ๋ณ์ result๋ฅผ ์ด๊ธฐํํฉ๋๋ค.
result = 0
# ๋ฌดํ ๋ฃจํ๋ฅผ ๋๋ฉด์ 5๋ก ๋๋์ด ๋จ์ด์ง๋์ง ํ์ธํฉ๋๋ค.
while True:
# ๋ง์ฝ 5๋ก ๋๋์ด ๋จ์ด์ง๋ค๋ฉด, result์ (n // 5)๋ฅผ ๋ํ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ๋๋ค.
if n % 5 == 0:
result += (n // 5)
print(result)
break
# 5๋ก ๋๋์ด ๋จ์ด์ง์ง ์๋๋ค๋ฉด, n์์ 2๋ฅผ ๋นผ๊ณ result์ 1์ ๋ํฉ๋๋ค.
else :
n -= 2
result += 1
# ๋ง์ฝ n์ด 0๋ณด๋ค ์์์ง๋ค๋ฉด, 5์ 2๋ก ๋ํ๋ผ ์ ์์ผ๋ฏ๋ก -1์ ์ถ๋ ฅํ๊ณ ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ๋๋ค.
if n < 0:
print(-1)
break
ver(2) - Dynamic Programming ์ฌ์ฉ
# ์ ์ n์ ์
๋ ฅ๋ฐ์ต๋๋ค.
n = int(input())
# DP ํ
์ด๋ธ dp๋ฅผ ์์ฑํฉ๋๋ค.
# ์ฌ๊ธฐ์ dp[i]๋ i๋ฒ์งธ ์ฌ๋ค๋ฆฌ๋ฅผ ์ฌ๋ผ๊ฐ๋ ์ต์ ์ด๋ ํ์๋ฅผ ์๋ฏธํฉ๋๋ค.
dp = [-1] * (n+8)
# ์ด๊ธฐ๊ฐ์ ์ค์ ํฉ๋๋ค.
dp[2]=1
dp[4]=2
dp[5]=1
dp[6]=3
dp[7]=2
dp[8]=4
# DP๋ฅผ ์คํํฉ๋๋ค.
for i in range(9,n+1):
dp[i] = min(dp[i-2],dp[i-5]) + 1
# n๋ฒ์งธ ์ฌ๋ค๋ฆฌ๋ฅผ ์ฌ๋ผ๊ฐ๋ ์ต์ ์ด๋ ํ์๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
print(dp[n])
๋๊ธ๋จ๊ธฐ๊ธฐ