์•Œ๊ณ ๋ฆฌ์ฆ˜/DP

[๋ฐฑ์ค€ 1463 ๐Ÿฅˆ] 1๋กœ ๋งŒ๋“ค๊ธฐ

1eehyunji 2023. 11. 2. 01:57

https://www.acmicpc.net/problem/1463

 

1463๋ฒˆ: 1๋กœ ๋งŒ๋“ค๊ธฐ

์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 106๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

๋ฌธ์ œ

์ •์ˆ˜ X์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ ๊ฐ€์ง€ ์ด๋‹ค.

  1. X๊ฐ€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด, 3์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.
  2. X๊ฐ€ 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋ฉด, 2๋กœ ๋‚˜๋ˆˆ๋‹ค.
  3. 1์„ ๋บ€๋‹ค.

์ •์ˆ˜ N์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ์œ„์™€ ๊ฐ™์€ ์—ฐ์‚ฐ ์„ธ ๊ฐœ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์„œ 1์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 10^6๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ •์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์—ฐ์‚ฐ์„ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๋ฌธ์ œ ํ’€์ด

  • BFS๋กœ ํ’€๊นŒ..? ํ–ˆ์ง€๋งŒ ์ž…๋ ฅ์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ 10^6์ธ ๊ฒƒ์„ ๋ณด๊ณ  DP๋กœ ํ’€์–ด์•ผ๊ฒ ๋‹ค ์ƒ๊ฐํ–ˆ๋‹ค.
  • DP๋กœ ํ‘ธ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€๋ฆฐ๋‹ค!
  • dp[num]์€ num์„ 1๋กœ ๋งŒ๋“œ๋Š” ๋ฐ์— ํ•„์š”ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • dp[1]์€ ์•„๋ฌด๋Ÿฐ ์—ฐ์‚ฐ์„ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ์ด๋ฏธ 1์ด๋ฏ€๋กœ 0์„ ์ €์žฅํ•˜๊ณ , dp[2]๋ถ€ํ„ฐ dp[n]๊นŒ์ง€ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.
  • 3๊ณผ 2 ๋ชจ๋‘ ๋‚˜๋ˆ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋Š” 6, 12, 18,.. ๊ณผ ๊ฐ™์€ ์ˆ˜๋“ค์€ 1,2,3๋ฒˆ ์—ฐ์‚ฐ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • 3์œผ๋กœ ๋‚˜๋ˆˆ ์ˆ˜์˜ dp ๊ฐ’ / 2๋กœ ๋‚˜๋ˆˆ ์ˆ˜์˜ dp ๊ฐ’ / 1์„ ๋นผ์ค€ ์ˆ˜์˜ dp ๊ฐ’ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์„ ํƒํ•˜๊ณ  +1์„ ํ•ด์„œ ํ•ด๋‹น ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ํšŸ์ˆ˜ 1์„ ๋”ํ•ด์„œ dp ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
  • ๋‹ค์Œ์œผ๋กœ 3์œผ๋กœ๋งŒ ๋‚˜๋ˆ ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ์—” 1๋ฒˆ ์—ฐ์‚ฐ๊ณผ 3๋ฒˆ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • 3์œผ๋กœ ๋‚˜๋ˆˆ ์ˆ˜์˜ dp ๊ฐ’ / 1์„ ๋นผ์ค€ ์ˆ˜์˜ dp ๊ฐ’ ์ค‘ ์ž‘์€ ๊ฐ’์„ ์„ ํƒํ•˜๊ณ  ํ•ด๋‹น ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ํšŸ์ˆ˜ 1์„ ๋”ํ•ด์„œ dp ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • 2๋กœ๋งŒ ๋‚˜๋ˆ ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋„ ์œ„์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ 2๋กœ ๋‚˜๋ˆˆ ์ˆ˜์˜ dp ๊ฐ’ / 1์„ ๋นผ์ค€ ์ˆ˜์˜ dp ๊ฐ’ ์ค‘ ์ž‘์€ ๊ฐ’์„ ์„ ํƒํ•ด์„œ dp ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.
  • 3๊ณผ 2 ๋ชจ๋‘ ๋‚˜๋ˆ ๋–จ์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—” 3๋ฒˆ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ 1์„ ๋นผ์ค€ ์ˆ˜์˜ dp ๊ฐ’์— 1์„ ๋”ํ•ด์„œ dp๊ฐ’์„ ๊ฐฑ์‹ ํ•ด์ค€๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ชจ๋‘ ๊ฑฐ์ณ์„œ dp[n] ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด ๋!
import sys

n=int(sys.stdin.readline())

dp=[0]*(n+1)
dp[1]=0
for i in range(2,n+1):
    # 3๊ณผ 2๋กœ ๋ชจ๋‘ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์งˆ ๊ฒฝ์šฐ
    if i % 3 == 0 and i % 2 == 0:
        dp[i]=min(dp[i//3], dp[i//2], dp[i-1])+1
    elif i%3==0:
        dp[i]=min(dp[i//3], dp[i-1])+1
    elif i%2==0:
        dp[i]=min(dp[i//2], dp[i-1])+1
    else:
        dp[i]=dp[i-1]+1

print(dp[n])