Notice
Recent Posts
Link
Today
Total
10-06 00:17
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ณธ๋ฌธ

๐Ÿ”ตCoding Test/Algorithm

[ ์ด๊ฒƒ์ด ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ ] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 4. 29. 14:10

 

• ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉ์‚ฌ์—ฌ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ๋น„์•ฝ์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•

 ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ(์ž‘์€ ๋ฌธ์ œ)๋Š” ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ์ €์žฅํ•˜์—ฌ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ตฌํ˜„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹(ํƒ‘๋‹ค์šด, ๋ณดํ…€์—…)์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋™์  ๊ณ„ํš๋ฒ•์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.

 

์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ถ„์•ผ์—์„œ ๋™์ (Dynamic)์ด๋ž€

: ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋™์  ํ• ๋‹น(Dynamic Allocation)์€ 'ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ๋ฒ•'

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ '๋‹ค์ด๋‚˜๋ฏน'์€ ๋ณ„๋‹ค๋ฅธ ์˜๋ฏธ์—†์ด ์‚ฌ์šฉ๋œ ๋‹จ์–ด 

 

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

1. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ (Optimal Substructure)

  : ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘์€ ๋ฌธ์ œ์˜ ๋‹ต์„ ๋ชจ์•„์„œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

2. ์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ (Overlapping Subproblem)

  : ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.

 

ex) ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด 

 

๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)

: ๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜

: ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฉ”๋ชจํ•˜๋Š” ๊ธฐ๋ฒ•

  • ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ”๋ชจํ–ˆ๋˜ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.

  • ๊ฐ’์„ ๊ธฐ๋กํ•ด ๋†“๋Š”๋‹ค๋Š” ์ ์—์„œ ์บ์‹ฑ(Caching)์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 

 ํƒ‘๋‹ค์šด(๋ฉ”๋ชจ์ด์ œ์ด์…˜) ๋ฐฉ์‹์€ ํ•˜ํ–ฅ์‹์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋ณดํ…€์—… ๋ฐฉ์‹์€ ์ƒํ–ฅ์‹์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.

 ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ „ํ˜•์ ์ธ ํ˜•ํƒœ๋Š” ๋ณดํ…€์—… ๋ฐฉ์‹

   • ๊ฒฐ๊ณผ ์ €์žฅ์šฉ ๋ฆฌ์ŠคํŠธ๋Š” DP ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์ด์ „์— ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๊ธฐ๋กํ•ด ๋†“๋Š” ๋„“์€ ๊ฐœ๋…์„ ์˜๋ฏธ

   • ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๊ตญํ•œ๋œ ๊ฐœ๋…์€ ์•„๋‹ˆ๋‹ค.

   • ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋‹ด์•„๋†“๊ธฐ๋งŒ ํ•˜๊ณ  ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ํ™œ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

• ์ฃผ์–ด์ง„ ๋ฌธ์ œ๊ฐ€ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์œ ํ˜•์ž„์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

• ๊ฐ€์žฅ ๋จผ์ € ๊ทธ๋ฆฌ๋””, ๊ตฌํ˜„, ์™„์ „ ํƒ์ƒ‰ ๋“ฑ์˜ ์•„์ด๋””์–ด๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ๋‹ค.

   •  ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์ด ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์œผ๋ฉด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ณ ๋ คํ•ด๋ณด์ž

 

• ์ผ๋‹จ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๋น„ํšจ์œจ์ ์ธ ์™„์ „ ํƒ์ƒ‰ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ ๋’ค์— (ํƒ‘๋‹ค์šด) ์ž‘์€ ๋ฌธ์ œ์—์„œ ๊ตฌํ•œ ๋‹ต์ด ํฐ ๋ฌธ์ œ์—์„œ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉด, ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ˆ˜์ค€์—์„œ๋Š” ๊ธฐ๋ณธ ์œ ํ˜•์˜ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

 ** ์ ํ™”์‹ ์„ธ์›Œ๋ณด๊ธฐ ** 

 

1. 1๋กœ ๋งŒ๋“ค๊ธฐ (์‹ค์ „๋ฌธ์ œ)

2. ๊ฐœ๋ฏธ์ „์‚ฌ (์‹ค์ „๋ฌธ์ œ)

3. ๋ฐ”๋‹ฅ๊ณต์‚ฌ (์‹ค์ „๋ฌธ์ œ)

4. ํšจ์œจ์ ์ธ ํ™”ํ๊ตฌ์„ฑ (์‹ค์ „๋ฌธ์ œ)

 

[ ์‹ค์ „๋ฌธ์ œ ]  1๋กœ ๋งŒ๋“ค๊ธฐ

โ€ป ๋ฌธ์ œ

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

 

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

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

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

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

 

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

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

์˜ˆ๋ฅผ ๋“ค์–ด ์ •์ˆ˜๊ฐ€ 26์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•ด์„œ 3๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ์ตœ์†Ÿ๊ฐ’์ด๋‹ค.

 

1. 26 - 1 = 25 (d)

2. 25 / 5 = 5 (a)

3. 5 / 5 = 1 (a)

 

์ž…๋ ฅ์กฐ๊ฑด 

- ์ฒซ์งธ ์ค„์— ์ •์ˆ˜ X๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ( 1≤X≤30,000 )

 

์ถœ๋ ฅ์กฐ๊ฑด 

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

# 1๋กœ ๋งŒ๋“ค๊ธฐ
x = int(input())

# ์•ž์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
d = [0] * 3001

# ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ์ง„ํ–‰ (๋ณดํ…€์—…)
for i in range(2, x + 1):
    # ํ˜„์žฌ์˜ ์ˆ˜์—์„œ 1์„ ๋นผ๋Š” ๊ฒฝ์šฐ
    d[i] = d[i - 1] + 1
    # ํ˜„์žฌ์˜ ์ˆ˜๊ฐ€ 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ
    if i % 2 == 0:
        d[i] = min(d[i], d[i // 2] + 1)
    # ํ˜„์žฌ์˜ ์ˆ˜๊ฐ€ 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ
    if i % 3 == 0:
        d[i] = min(d[i], d[i // 3] + 1)
    # ํ˜„์žฌ์˜ ์ˆ˜๊ฐ€ 5๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ
    if i % 5 == 0:
        d[i] = min(d[i], d[i // 5] + 1)

print(d[x])

 

[ ์‹ค์ „๋ฌธ์ œ ]  ๊ฐœ๋ฏธ ์ „์‚ฌ

โ€ป ๋ฌธ์ œ

๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ๋ถ€์กฑํ•œ ์‹๋Ÿ‰์„ ์ถฉ๋‹นํ•˜๊ณ ์ž ๋ฉ”๋šœ๊ธฐ ๋งˆ์„์˜ ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ๋ชฐ๋ž˜ ๊ณต๊ฒฉํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋ฉ”๋šœ๊ธฐ ๋งˆ์„์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹๋Ÿ‰ ์ฐฝ๊ณ ๊ฐ€ ์žˆ๋Š”๋ฐ ์‹๋Ÿ‰์ฐฝ๊ณ ๋Š” ์ผ์ง์„ ์œผ๋กœ ์ด์–ด์ ธ ์žˆ๋‹ค. ๊ฐ ์‹๋Ÿ‰์ฐฝ๊ณ ์—๋Š” ์ •ํ•ด์ง„ ์ˆ˜์˜ ์‹๋Ÿ‰์„ ์ €์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ์‹๋Ÿ‰ ์ฐฝ๊ณ ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์•ฝํƒˆํ•˜๋ ค ์‹๋Ÿ‰์„ ๋นผ์•—์„ ์˜ˆ์ •์ด๋‹ค.

์ด๋•Œ ๋ฉ”๋šœ๊ธฐ ์ •์ฐฐ๋ณ‘๋“ค์€ ์ผ์ง์„ ์ƒ์— ์กด์žฌํ•˜๋Š” ์‹๋Ÿ‰์ฐฝ๊ณ  ์ค‘์—์„œ ์„œ๋กœ ์ธ์ ‘ํ•œ ์‹๋Ÿ‰์ฐฝ๊ณ ๊ฐ€ ๊ณต๊ฒฉ๋ฐ›์œผ๋ฉด ๋ฐ”๋กœ ์•Œ์•„์ฑŒ ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฏธ ์ „์‚ฌ๊ฐ€ ์ •์ฐฐ๋ณ‘์—๊ฒŒ ๋“คํ‚ค์ง€ ์•Š๊ณ  ์‹๋Ÿ‰์ฐฝ๊ณ ๋ฅผ ์•ฝํƒˆํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ตœ์†Œํ•œ ํ•œ ์นธ ์ด์ƒ ๋–จ์–ด์ง„ ์‹๋Ÿ‰ ์ฐฝ๊ณ ๋ฅผ ์•ฝํƒˆํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์‹๋Ÿ‰ํƒ•๊ณ  4๊ฐœ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

{ 1, 3, 1, 5 }

์ด ๋•Œ ๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ๋‘ ๋ฒˆ์งธ ์‹๋Ÿ‰์ฐฝ๊ณ ์™€ ๋„ค ๋ฒˆ์งธ ์‹๋Ÿ‰ ์ฐฝ๊ณ ๋ฅผ ์„ ์ฑ…ํ–ˆ์„ ๋•Œ ์ตœ๋Œ“๊ฐ’์ธ ์ด 8๊ฐœ์˜ ์‹๋Ÿ‰์„ ๋นผ์•—์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฐœ๋ฏธ ์ „์‚ฌ๋Š” ์‹๋Ÿ‰์ฐจ๊ณ ๊ฐ€ ์ด๋ ‡๊ฒŒ ์ผ์ง์„ ์ƒ์ผ ๋•Œ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‹๋Ÿ‰์„ ์–ป๊ธฐ๋ฅผ ์›ํ•œ๋‹ค.

๊ฐœ๋ฏธ ์ „์‚ฌ๋ฅผ ์œ„ํ•ด ์‹๋Ÿ‰์ฐฝ๊ณ  N๊ฐœ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹๋Ÿ‰์˜ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. 

 

์ž…๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์— ์‹๋Ÿ‰์ฐฝ๊ณ  ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ( 3≤N≤100 )

- ๋‘˜์งธ ์ค„์— ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ๊ฐ ์‹๋Ÿ‰์ฐฝ๊ณ ์— ์ €์žฅ๋œ ์‹๋Ÿ‰์˜ ๊ฐœ์ˆ˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ( 0≤K≤1,000 )

 

์ถœ๋ ฅ์กฐ๊ฑด 

- ์ฒซ์งธ ์ค„์— ๊ฐœ๋ฏธ ์ „์‚ฌ๊ฐ€ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹๋Ÿ‰์˜ ์ตœ๋Œ“๊ฐ’์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

# ๊ฐœ๋ฏธ ์ „์‚ฌ

# ์ •์ˆ˜ N์„ ์ž…๋ ฅ๋ฐ›๊ธฐ
n = int(input())
# ๋ชจ๋“  ์‹๋Ÿ‰ ์ •๋ณด ์ž…๋ ฅ๋ฐ›๊ธฐ
k = list(map(int, input().split()))

# ์•ž์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
d = [0] * 100

# ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programming) ์ง„ํ–‰ (๋ณดํ…€์—…)
d[0] = k[0]
d[1] = max(k[0], k[1])

for i in range (2, n):
    d[i] = max(d[i-1], d[i-2] + k[i])

# ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(d[n-1])

 

[ ์‹ค์ „๋ฌธ์ œ ]  ๋ฐ”๋‹ฅ ๊ณต์‚ฌ

โ€ป ๋ฌธ์ œ

๊ฐ€๋กœ์˜ ๊ธธ์ด๊ฐ€ N, ์„ธ๋กœ์˜ ๊ธธ์ด๊ฐ€ 2์ธ ์ง์‚ฌ๊ฐํ˜• ํ˜•ํƒœ์˜ ์–‡์€ ๋ฐ”๋‹ฅ์ด ์žˆ๋‹ค. ํƒœ์ผ์ด๋Š” ์ด ์–‡์€ ๋ฐ”๋‹ฅ์„ 1 X 2์˜ ๋ฎ๊ฐœ, 2 X 1์˜ ๋ฎ๊ฐœ, 2 X 2์˜ ๋ฎ๊ฐœ๋ฅผ ์ด์šฉํ•ด ์ฑ„์šฐ๊ณ ์ž ํ•œ๋‹ค.

 

์ด๋•Œ ๋ฐ”๋‹ฅ์„ ์ฑ„์šฐ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 X 3 ํฌ๊ธฐ์˜ ๋ฐ”๋‹ฅ์„ ์ฑ„์šฐ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 5๊ฐ€์ง€ ์ด๋‹ค.

 

์ž…๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์—๋Š” N์ด ์ฃผ์–ด์ง„๋‹ค. ( 0≤N≤1,000 )

 

์ถœ๋ ฅ์กฐ๊ฑด 

- ์ฒซ์งธ ์ค„์—  2 X N ํฌ๊ธฐ์˜ ๋ฐ”๋‹ฅ์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ 796,796์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. 

n = int(input())

d = [0] * 1001

d[1] = 1
d[2] = 3
for i in range(3, n+1):
    d[i] = (d[i-1] + 2 * d[i-2]) % 796796

# ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(d[n])

 

[ ์‹ค์ „๋ฌธ์ œ ]  ํšจ์œจ์ ์ธ ํ™”ํ ๊ตฌ์„ฑ

โ€ป ๋ฌธ์ œ

N๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ํ™”ํ๊ฐ€ ์žˆ๋‹ค. ์ด ํ™”ํ๋“ค์˜ ๊ฐœ์ˆ˜๋ฅผ ์ตœ์†Œํ•œ์œผ๋กœ ์ด์šฉํ•ด์„œ ๊ทธ ๊ฐ€์น˜์˜ ํ•ฉ์ด M์›์ด ๋˜๋„๋ก ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋•Œ ๊ฐ ํ™”ํ๋Š” ๋ช‡ ๊ฐœ๋ผ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉํ•œ ํ™”ํ์˜ ๊ตฌ์„ฑ์€ ๊ฐ™์ง€๋งŒ ์ˆœ์„œ๋งŒ ๋‹ค๋ฅธ ๊ฒƒ์€ ๊ฐ™์€ ๊ฒฝ์šฐ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 2์›, 3์› ๋‹จ์œ„์˜ ํ™”ํ๊ฐ€ ์žˆ์„ ๋•Œ๋Š” 15์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด 3์›์„ 5๊ฐœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ตœ์†Œํ•œ์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

 

์ž…๋ ฅ์กฐ๊ฑด

- ์ฒซ์งธ ์ค„์—๋Š” N, M์ด ์ฃผ์–ด์ง„๋‹ค. ( 1≤N≤100, 1≤M≤10,000 )

- ์ดํ›„ N๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ ํ™”ํ์˜ ๊ฐ€์น˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํ™”ํ ๊ฐ€์น˜๋Š” 10,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ์กฐ๊ฑด 

- ์ฒซ์งธ ์ค„์—  M์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ํ™”ํ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

- ๋ถˆ๊ฐ€๋Šฅํ•  ๋•Œ๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค.

# ํšจ์œจ์ ์ธ ํ™”ํ ๊ตฌ์„ฑ

# ์ •์ˆ˜ N, M์„ ์ž…๋ ฅ๋ฐ›๊ธฐ
n, m = map(int, input().split())
# N๊ฐœ์˜ ํ™”ํ ๋‹จ์œ„ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›๊ธฐ
array = []
for i in range(n):
    array.append(int(input()))

# ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
d = [10001] * (m + 1)  # ๊ฐ€์น˜์˜ ํ•ฉ + 1 : ์ธ๋ฑ์Šค 0 ํฌํ•จ

# ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) ์ง„ํ–‰ (๋ณดํ…€์—…)
d[0] = 0
for i in range(n):  # ํ™”ํ ์ข…๋ฅ˜์˜ ์ˆ˜
    for j in range(array[i], m + 1):  # ํ™”ํ์˜ ์ข…๋ฅ˜ ๋ถ€ํ„ฐ d ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ๋ฐ˜๋ณต ๊ฐ€์น˜์˜ ํ•ฉ + 1
        if d[j - array[i]] != 10001:  # (i-k)์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ
            d[j] = min(d[j], d[j - array[i]] + 1)

# ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
if d[m] == 10001:  # ์ตœ์ข…์ ์œผ๋กœ M์›์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋Š” ๊ฒฝ์šฐ
    print(-1)
else:
    print(d[m])

 

๊ฐ•์˜ ๋ฐ ์ถœ์ฒ˜

 

 

Comments