python

[์•Œ๊ณ ๋ฆฌ์ฆ˜] #03 ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ-1๋กœ ๋งŒ๋“ค๊ธฐ

Soo-minJeon 2022. 7. 3. 22:10

๐Ÿ›  '1๋กœ ๋งŒ๋“ค๊ธฐ' ๋ฌธ์ œ

๐Ÿ”ง  ๋ฌธ์ œ 

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

1. X๊ฐ€ 5๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋ฉด, 5๋กœ ๋‚˜๋ˆˆ๋‹ค.

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

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

4. X์—์„œ 1์„ ๋บ€๋‹ค.

 

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

 

- ์ž…๋ ฅ์กฐ๊ฑด : ์ฒซ์งธ ์ค„์— ์ •์ˆ˜ X๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 <= X <= 30,000)

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

 

์ž…๋ ฅ์˜ˆ์‹œ ์ถœ๋ ฅ์˜ˆ์‹œ
26 3

๐Ÿ”ง ์•„์ด๋””์–ด

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

2. ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ์ •๋‹ต์€ ๊ทธ๊ฒƒ์„ ํฌํ•จํ•˜๋Š” ํฐ ๋ฌธ์ œ์—์„œ๋„ ๋™์ผํ•˜๋‹ค.

 

์ด ๋ฌธ์ œ๋Š” ๋‘ ์กฐ๊ฑด ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋ฏ€๋กœ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ bottom-up ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

1) 1์˜ ๊ฒฝ์šฐ

- 1์€ ๋” ์ด์ƒ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ f(1) = 0

 

2) 2์˜ ๊ฒฝ์šฐ(2์˜ ๋ฐฐ์ˆ˜)

- 2๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์€ '2๋กœ ๋‚˜๋ˆ„๊ธฐ', '1 ๋นผ๊ธฐ'์ด๋‹ค.

a. 2๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ : f(2) = (2๋กœ ๋‚˜๋ˆ”) + f(1) = 1 + f(i//2) = 1๋ฒˆ ์—ฐ์‚ฐ

b. 1์„ ๋บ„ ๊ฒฝ์šฐ : f(2) = (1 ๋บŒ) + f(1) = 1๋ฒˆ ์—ฐ์‚ฐ

- ๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฏ€๋กœ ์ตœ์†Ÿ๊ฐ’ ์ƒ๊ฐํ•  ํ•„์š” ์—†์ด f(2) = 1

 

3) 3์˜ ๊ฒฝ์šฐ(3์˜ ๋ฐฐ์ˆ˜)

- 3์œผ๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์€ '3์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ', '1 ๋นผ๊ธฐ'์ด๋‹ค.

a. 3๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ : f(3) = (3์œผ๋กœ ๋‚˜๋ˆ”) + f(1) = 1 + f(i//3) = 1๋ฒˆ ์—ฐ์‚ฐ

b. 1์„ ๋บ„ ๊ฒฝ์šฐ : f(3) = (1 ๋บŒ) + f(2) = 2๋ฒˆ ์—ฐ์‚ฐ

- ๋‘ ๊ฐ’์ด ๋‹ค๋ฅด๋ฏ€๋กœ min(a๊ฒฝ์šฐ, b๊ฒฝ์šฐ) = a๊ฒฝ์šฐ ์ด๋ฏ€๋กœ f(3) = 1

 

4) 4์˜ ๊ฒฝ์šฐ

- 2๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์€ '2๋กœ ๋‚˜๋ˆ„๊ธฐ', '1 ๋นผ๊ธฐ'์ด๋‹ค.

a. 2๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ : f(4) = (2๋กœ ๋‚˜๋ˆ”) + f(2) = 2๋ฒˆ ์—ฐ์‚ฐ

b. 1์„ ๋บ„ ๊ฒฝ์šฐ : f(4) = (1 ๋บŒ) + f(3) = 2๋ฒˆ ์—ฐ์‚ฐ

- ๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฏ€๋กœ ์ตœ์†Ÿ๊ฐ’ ์ƒ๊ฐํ•  ํ•„์š” ์—†์ด f(4) = 2

 

5) 5์˜ ๊ฒฝ์šฐ(5์˜ ๋ฐฐ์ˆ˜)

- ์ƒ๋žต

-  f(5) = 1 + f(i//5) = 2

 

6) 6์˜ ๊ฒฝ์šฐ(2์™€ 3์˜ ๋ฐฐ์ˆ˜)

- 2, 3์œผ๋กœ ๋‚˜๋ˆ ์ง€๋ฏ€๋กœ ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์€ '2๋กœ ๋‚˜๋ˆ„๊ธฐ', '3์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ', '1 ๋นผ๊ธฐ'

a. 2๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ : f(6) = (2๋กœ ๋‚˜๋ˆ”) + f(3) = 2

b. 3์œผ๋กœ ๋‚˜๋ˆŒ ๊ฒฝ์šฐ : f(6) =(3์œผ๋กœ ๋‚˜๋ˆ”) + f(2) = 3

c. 1์„ ๋บ„ ๊ฒฝ์šฐ : f(6) = (1 ๋บŒ) + f(5) = 2

- min(f(i//2)+1, f(i//3)+1, f(i-1)+1)

- ์ตœ์†Ÿ๊ฐ’์€ f(6) = 2

 

7) 7์˜ ๊ฒฝ์šฐ

- ๊ฐ€๋Šฅํ•œ ์—ฐ์‚ฐ์€ '1 ๋นผ๊ธฐ'

a. 1์„ ๋บ„ ๊ฒฝ์šฐ : f(7) = (1 ๋บŒ) + f(6) = 1 + f(i-1) =3

- f(7) = 3

 

์ด๋Ÿฐ์‹์œผ๋กœ ๋กœ์ง์„ ์ƒ๊ฐํ–ˆ๋‹ค.

 

๊ฐ ์›์†Œ๋ฅผ 0์œผ๋กœ ํ• ๋‹นํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  for ๋ฌธ์„ ๋Œ๋ ค ๋ชฉํ‘œ๊ฐ’ ๊นŒ์ง€ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ ํ›„์—

์—ฐ์‚ฐ ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.


๐Ÿ”ง ์ฝ”๋“œ ์ž‘์„ฑ

x = int(input())

answer = [0 for i in range(3002)]

for i in range(2, x+1):
    answer[i] = answer[i-1]+1
    if (i % 2 == 0 ) : # 2์˜ ๋ฐฐ์ˆ˜๋ผ๋ฉด
        answer[i] = min(answer[i], answer[i//2] + 1)
    if (i % 3 == 0):  # 3์˜ ๋ฐฐ์ˆ˜๋ผ๋ฉด
        answer[i] = min(answer[i], answer[i // 3] + 1)
    if (i % 5 == 0 ) : # 5์˜ ๋ฐฐ์ˆ˜๋ผ๋ฉด
        answer[i] = min(answer[i], answer[i//5] + 1)

print(answer[x])

 

https://github.com/Soo-minJeon/CodingTestPractice/blob/ca77e81f3c17dc1cd93b68fa47b8d4355e8eb89b/study_book/ch08_DynamicProgramming/make1.py

 

โ˜บ๏ธ์ฅ”์žฅ๊นƒํ—™ ์ฃผ์†Œ