๋ฐฑ์ค€ - 1๋กœ ๋งŒ๋“ค๊ธฐ(Python)

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

๋ฐฑ์ค€ - 1๋กœ ๋งŒ๋“ค๊ธฐ(Python)

 

www.acmicpc.net/problem/1463

 

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

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

www.acmicpc.net

๋ฌธ์ œ ํ•ด์„:

์œ„ ๋ฌธ์ œ๋Š” ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋Œ€ํ‘œํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์–ด๋ ค์šด ๊ฐœ๋…์€ ์•„๋‹ˆ๊ณ  ํ•„์ž์˜ ๊ฒฝํ—˜๋Œ€๋กœ ํ’€์–ด์“ฐ์ž๋ฉด ๊ธด ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ์ค„์ด๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์— '์ ํ™”์‹'๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์˜ ํ™œ์šฉ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

ํ•„์ž๊ฐ€ ํ’€์–ด๋ณธ 1๋กœ ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ์ค‘์— ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋„ ์žˆ์—ˆ๋Š”๋ฐ, ๋™์ „ ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ(๊ทธ๋ฆฌ๋””)์ฒ˜๋Ÿผ ํฐ์ˆ˜๋ถ€ํ„ฐ ๋‚˜๋ˆ„๋ฉด ์ตœ์†Ÿ๊ฐ’์ด ๋‹น์—ฐํ•˜๊ฒŒ ๋‚˜์˜ค์ง€ ์•Š์ง€ ์•Š๋‚˜?๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํฐ ์ˆ˜๋กœ ๋‚˜๋ˆ„๋‹ค๊ฐ€ ๊ฐ’์ด ๋‚˜๋ˆ ์ง€์ง€ ์•Š์•„ 1๋กœ ๊ณ„์† ๋นผ์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์˜คํžˆ๋ ค ์ตœ์†Ÿ๊ฐ’์ด ์•„๋‹Œ ์ตœ๋Œ€๊ฐ’์— ๊ฐ€๊นŒ์šด ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

 

์ด์™€ ๊ฐ™์ด 1๋กœ ๋งŒ๋“œ๋Š”๋ฐ ๋งŽ์€ ์กฐ๊ฑด์ด ๋ถ™์€ ๊ฒƒ์€ ๋ณดํ†ต ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” d๋ผ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋ณผ ๊ฑด๋ฐ, '์ด๋Š” 1๊นŒ์ง€ ๋งŒ๋“œ๋Š”๋ฐ ์—ฐ์‚ฐ๋˜๋Š” ์ตœ์†Œํ•œ์˜ ๊ฐ’์„ ๋‹ด๋Š” ๋ฆฌ์ŠคํŠธ'์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด d[1]์˜ 1๊นŒ์ง€ ๋งŒ๋“œ๋Š”๋ฐ ์—ฐ์‚ฐ๋˜๋Š” ์ตœ์†Œํ•œ์˜ ๊ฐ’์€ 0์ด๋‹ค. 1์€ 1์ด๊ธฐ ๋–„๋ฌธ์— ์—ฐ์‚ฐ์ด ํ•„์š”์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

d[2]๋Š” 1๊นŒ์ง€ ๋งŒ๋“œ๋Š”๋ฐ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ค.

 

 1. 1์„ ๋บ€๋‹ค.

 2. 2๋กœ ๋‚˜๋ˆˆ๋‹ค. 

d[2]๋Š” ๋‘๊ฐœ์˜ ์—ฐ์‚ฐ๋œ ๊ฐ’์ด ๋ชจ๋‘ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ํƒํ•ด์„œ d[2]์— ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ d[3]์€ ์–ด๋–จ๊นŒ?

  1. 1์„ ๋บ€๋‹ค

  2. 3์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

 

1๋ฒˆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด 

  ๊ฐ’์ด 2๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋˜ d[2]๊ณผ์ •์„ ํ•ด์•ผํ•œ๋‹ค. ์ด 2๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

 

2๋ฒˆ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด

  ๊ณง๋ฐ”๋กœ 1์ด๋˜์–ด ์—ฐ์‚ฐ์ด 1๋ฒˆ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋‘๊ฐœ์˜ ์—ฐ์‚ฐ ์ค‘ ์ตœ์†Œ๊ฐ’์„ d[3]์— ๋‹ด์œผ๋ฉด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

d[10]์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋– ํ•œ ์›๋ฆฌ๋กœ ๊ณ„์‚ฐ์ด ๋˜๋Š” ๊ฑธ๊นŒ?

 

1์„ ๋จผ์ €๋บด๊ณ , 3์œผ๋กœ ๋‚˜๋ˆ„๊ณ , 3์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

d[10] = d[10-1]+1 --> d[9] = d[9//3]+1 --> d[3]  = d[3//3] +1  ------->result = 3

 

 

์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด๋ณด๋ฉด ์ด๋ ‡๋‹ค.

 

x = int(input())

d = [0]*100000001

d[1] = 0
for i in range(2,x+1):
  d[i] = d[i-1] +1
  if i%2==0:
    d[i] = min(d[i], d[i//2]+1)
  if i%3==0:
    d[i] = min(d[i], d[i//3]+1)

print(d[x])