1 ๋ถ„ ์†Œ์š”

๋ฐฑ์ค€ ์‚ฌ์ดํŠธ ๋งํฌ

๋ฌธ์ œ

์ถ˜ํ–ฅ์ด๋Š” ํŽธ์˜์  ์นด์šดํ„ฐ์—์„œ ์ผํ•œ๋‹ค.

์†๋‹˜์ด 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])

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ