๋ฐฑ์ค€ - ์„คํƒ• ๋ฐฐ๋‹ฌ(Python)

2020. 9. 8. 00:38ใ†๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด/๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ฐฑ์ค€ - ์„คํƒ• ๋ฐฐ๋‹ฌ(Python)

 

www.acmicpc.net/problem/2839

 

2839๋ฒˆ: ์„คํƒ• ๋ฐฐ๋‹ฌ

์ƒ๊ทผ์ด๋Š” ์š”์ฆ˜ ์„คํƒ•๊ณต์žฅ์—์„œ ์„คํƒ•์„ ๋ฐฐ๋‹ฌํ•˜๊ณ  ์žˆ๋‹ค. ์ƒ๊ทผ์ด๋Š” ์ง€๊ธˆ ์‚ฌํƒ•๊ฐ€๊ฒŒ์— ์„คํƒ•์„ ์ •ํ™•ํ•˜๊ฒŒ Nํ‚ฌ๋กœ๊ทธ๋žจ์„ ๋ฐฐ๋‹ฌํ•ด์•ผ ํ•œ๋‹ค. ์„คํƒ•๊ณต์žฅ์—์„œ ๋งŒ๋“œ๋Š” ์„คํƒ•์€ ๋ด‰์ง€์— ๋‹ด๊ฒจ์ ธ ์žˆ๋‹ค. ๋ด‰์ง€๋Š” 3ํ‚ฌ๋กœ๊ทธ๏ฟฝ๏ฟฝ

www.acmicpc.net

 

์ด ๋ฌธ์ œ๋ฅผ ์ ‘๊ทผํ•  ๋•Œ ๋งจ์ฒ˜์Œ์— ๋– ์˜ค๋ฅธ ์ƒ๊ฐ์€ dp๋ฅผ ์ด์šฉํ•ด์„œ ํ’€์–ด์•ผ๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. dp์˜ ์ธ๋ฑ์Šค๋Š” 0์ด ๋  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜์ด๋‹ค.

 

 

dp[3] = 1, dp[5] =1๋กœ ๋‘๊ณ  (3๊ณผ 5์ผ๋•Œ ๋ฐ”๋กœ ๊ทธ ๋‘ ๊ฐ’์„ ๋บ„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) range(6, ์ž…๋ ฅ๊ฐ’)์œผ๋กœ for๋ฌธ์„ ๋Œ๋ ธ๋‹ค.

 

for๋ฌธ์˜ ๋‚ด์šฉ์€ 3์œผ๋กœ ๋บ€๊ฐ’์ด ์ตœ๋Œ€๊ฐ’์ด ์•„๋‹๋•Œ(๊ฐ’์ด ์žˆ์„ ๋•Œ) ๊ทธ ์ˆ˜์— +1(์—ฐ์‚ฐ ํšŸ์ˆ˜)๋ฅผ ํ•ด์ฃผ์—ˆ๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ i-3๊ณผ i-5๋ฅผ ํ†ตํ•œ d[i]์˜ ๊ฐ’ ์ค‘์— ์ตœ์†Œ๊ฐ’์„ d[i]๋กœ ์„ค์ •ํ–ˆ๋‹ค.

 

 

์†Œ์Šค ์ฝ”๋“œ๋กœ ๋ณด๋Š” ๊ฒŒ ๋” ๊ฐ„ํŽธํ•  ๊ฒƒ์ด๋‹ค.

 

n = int(input())

dp = [5001]*5001

dp[3] =1
dp[5] =1

for i in range(6,n+1):
  if dp[i-3] != 5001:
    dp[i] = dp[i-3]+1
  if dp[i-5] != 5001:
    dp[i] = min(dp[i], dp[i-5]+1)
    
if dp[n] == 5000:
  print(-1)
else :
  print(dp[n])

๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋”๋‹ˆ ์ „๋ถ€ ํ•„์ž๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์ดํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

(ํ•„์ž๊ฐ€ ๋งŽ์ด ๋ถ€์กฑํ•œ ํƒ“์ด๋‹ค)

 

ํ†ต์šฉ์ ์œผ๋กœ ์“ฐ๊ณ  ์žˆ๋Š” ํ’€์ด ๋˜ํ•œ ์‚ดํŽด๋ณด์ž.

์ด ํ’€์ด๋Š” ์œ„์˜ ์ฝ”๋“œ๋ณด๋‹ค ๋”์šฑ๋” ๊น”๋”ํ•˜๊ณ  ์ง๊ด€์ ์ด๋‹ค.

1. 5๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉด ๋‚˜๋ˆˆ๋‹ค. 

2. 5๋กœ ๋ชป๋‚˜๋ˆ„๋ฉด ์ž…๋ ฅ๊ฐ’์—์„œ 3์„ ๋นผ๊ณ  count๋ฅผ ์˜ฌ๋ฆฐ๋‹ค. 

3. 1,2๋ฒˆ์„ ๋ฐ˜๋ณตํ•˜๋Š”๋ฐ ๋งŒ์•ฝ 5๋กœ ๋ชป๋‚˜๋ˆ„๊ณ  ๊ณ„์† 3์„ ๋นผ๋ฉด์„œ ์ž…๋ ฅ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์•„์ง„๋‹ค๋ฉด -1๋ฅผ ๋ฆฌํ„ดํ•ด์ค€๋‹ค.

 

์ด ์•„์ด๋””์–ด๋Š” "5๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉด ๋ฌด์กฐ๊ฑด ๋‚˜๋ˆ ๋ผ"๊ฐ€ ํ•ต์‹ฌ ์•„์ด๋””์–ด์ด๋‹ค.

 

์•„๋ž˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

n = int(input())

count =0

while True:
  if n%5==0:
    count = count + n//5
    print(box)
    break
  else :
    n = n-3
    count +=1
  if n<0:
    print(-1)
    break