๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€ ๊ธฐ๋ก

[์ด์ฝ”ํ…Œ/python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋… ์ •๋ฆฌ & ๋ฌธ์ œ ํ’€์ด ๊ธฐ๋ก โž• ๋ฐฑ์ค€ dp ๋ฌธ์ œ ํ’€์ด

by hyeonha 2024. 5. 29.

๋ชฉ์ฐจ

    DP

     

    DP๋Š” ํ•œ๋ฒˆ ํ•ด๊ฒฐํ•œ ๋ฌธ์ œ๋Š” ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

     

    ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์— ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ์˜ ๋‹ค์ด๋‚˜๋ฏน์˜ ์˜๋ฏธ!

     

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

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

     

    ์ ํ™”์‹์€ ์žฌ๊ท€ํ•จ์ˆ˜ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

    ์•ž ๋‘๊ฐœ์˜ ํ•ญ์„ ๋”ํ•˜์—ฌ ๊ทธ ๋‹ค์Œ ํ•ญ์„ ๋งŒ๋“ ๋‹ค.

    f(3)์„ ํ˜ธ์ถœํ•  ๋•Œ f(2)์™€ f(1)์„ ํ˜ธ์ถœํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋”ํ•ด์„œ  ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    def fibo(x):
      if x==1 or x ==2:
        return 1
      return fibo(x-1) + fibo(x-2)
    
    print(fibo(4))
    
    
    # ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œํ•ด๋Š” ๋ฌดํ•œ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋„๋ก ์ข…๋ฃŒ์กฐ๊ฑด์„ ์ ์–ด์ค˜์•ผํ•œ๋‹ค! 
    # x ๊ฐ€ 1 ๋˜๋Š” 2์ผ ๋•Œ๊ฐ€ ์ข…๋ฃŒ ์กฐ๊ฑด์ด๋‹ค.

    ์ ํ™”์‹ ๋ถ€๋ถ„์ด ์žฌ๊ท€์‹, a1๊ณผ a2์ด ์ข…๋ฃŒ์กฐ๊ฑด์ด ๋œ๋‹ค.

     

     

    f(6)์„ ํ˜ธ์ถœํ–ˆ์„ ๋ฟ์ธ๋ฐ f(2)๊ฐ€ 5๋ฒˆ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ๋‹ค. -> ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ๋น„ํšจ์œจ 

    ๋”ฐ๋ผ์„œ ํ•œ๋ฒˆ ํ•ด๊ฒฐํ•œ f(2)์— ๋Œ€ํ•ด์„œ ์ด ๋ฌธ์ œ์˜ ๋‹ต์€ ์ด๊ฑฐ๋ผ๊ณ  ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค

     

    .

     

    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• (ํ•˜ํ–ฅ์‹)

    ๋ฐฐ์—ด ์ด๋ฆ„์„ cache, table ,dp, d๋ผ๊ณ  ์„ค์ •ํ•˜๊ณค ํ•œ๋‹ค.

    ์ƒํ–ฅ์‹์€ ๋ฐ˜๋ณต๋ฌธ์„ ํ•ด๊ฒฐํ•œ๋‹ค. 

    dp๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜ํ–ฅ์‹์œผ๋กœ ์ ‘๊ทผํ•  ๋•Œ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

    ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ํƒ‘๋‹ค์šด ๋ฉ”๋ชจ์ด์ œ์ด์…˜ ๋ฐฉ์‹ ๊ตฌํ˜„ 

    #ํ•œ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ ์ดˆ๊ธฐํ™”
    d = [0] * 100
    
    # ํ”ผ๋ณด๋‚˜์น˜ ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ (ํƒ‘๋‹ค์šด ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ)
    
    def fibo(x):
    
      # ์ข…๋ฃŒ ์กฐ๊ฑด (1 ๋˜๋Š” 2์ผ ๋•Œ 1 ๋ฐ˜ํ™˜)
      if x==1 or x==2:
        return 1
      
      # ์ด๋ฏธ ๊ณ„์‚ฐํ•œ์  ์žˆ๋Š” ๋ฌธ์ œ๋ฉด ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
      if d[x] != 0:
        return d[x]
      
      # ์•„์ง ๊ณ„์‚ฐํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ๋ผ๋ฉด ์ ํ™”์‹์— ๋”ฐ๋ผ ํ”ผ๋ณด๋‚˜์น˜ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
      d[x] = fibo(x-1) + fibo(x-2)
      return d[x]
    print(fibo(99))

     

    ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋ฐ”ํ…€์—… ๋ฐฉ์‹ ๊ตฌํ˜„

    # ์•ž์„œ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ dp ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
    d = [0] * 100
    
    # ์ฒซ๋ฒˆ์งธ, ๋‘๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 1
    d[1] = 1
    d[2] = 1
    n=99
    
    # ๋ฐ”ํ…€์—… ๋ฐฉ์‹์€ ์žฌ๊ท€๊ฐ€ ์•„๋‹Œ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„!
    # ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•˜๊ณ , ๋จผ์ € ํ•ด๊ฒฐํ•ด๋†“์€ ๋ฌธ์ œ๋ฅผ ์กฐํ•ฉํ•ด์„œ ์•ž์œผ๋กœ์˜ ํฐ ๋ฌธ์ œ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊ตฌํ•œ๋‹ค.
    for i in range(3,n+1):
      d[i] = d[i-1] + d[i-2]
    
    print(d[n])

     


     

    ์ง€์ˆ˜ ์‹œ๊ฐ„๋งŒํผ ๊ฑธ๋ฆฌ๋˜ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋ฌธ์ œ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ  O(N) ๋งŒํผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.


     

    ํ”ผ๋ฒ—์„ 5๋กœ ์„ค์ • ํ›„ ํ€ต ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋ฉด 5๋ณด๋‹ค ์ž‘์€ ์›์†Œ์™€ 5๋ณด๋‹ค ํฐ ์›์†Œ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค.

    ์ด๋ ‡๊ฒŒ ํ•œ๋ฒˆ ๋ถ„ํ• ์ด ์ด๋ฃจ์–ด์ง„ ์ดํ›„ 5์— ๋Œ€ํ•ด์„œ๋Š” ์ด์ œ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๋ฌธ์ œ์— ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค.


    - ์ž‘์€ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ

    - ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ค‘๋ณต

     

    -> ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ ‘๊ทผ


    1๏ธโƒฃ์‹ค์ „ ๋ฌธ์ œ 1  : 1๋กœ ๋งŒ๋“ค๊ธฐ

     

    ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

    ๋‹จ์ˆœํžˆ 5๋กœ ๋‚˜๋ˆ„๊ธฐ, 3์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ, 1์„ ๋นผ์ฃผ๋Š” ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž…๋ ฅ๋œ ๊ฐ’์— ๋”ฐ๋ผ์„œ ์ž…๋ ฅ๊ฐ’์„ 1๋กœ ๋งŒ๋“œ๋Š” ์—ฐ์‚ฐ์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

     

    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•ด์„œ 

    ์ž…๋ ฅ๊ฐ’์ด 1์ผ ๋•Œ๋ถ€ํ„ฐ 

     

     

    ์ดˆ๊ธฐ ์ฝ”๋“œ๋‹ค.. ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด์•ผํ• ์ง€ ๊ฐ์ด ์ž˜ ์žกํžˆ์ง€ ์•Š์•˜๋‹ค.

    n = int(input().split())
    count =0
    def fibo(x):
      while(True):
        if x==1:
          return count 
        elif x % 5 ==0:
          count +=1
          x = x//5
        elif x % 3==0:
          count +=1
          x = x//3
        else:
          count +=1
          x -=1
      
    fibo(n)

     

     

    ์ตœ์ข… ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

     

    ๋งŒ์•ฝ 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ 1์„ ๋บ€ ๊ฒฝ์šฐ์˜ ์—ฐ์‚ฐ ํšŸ์ˆ˜๊ฐ€ ์ €์žฅ๋œ d[i]์™€ d[i//2] + 1์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด์ด๋‹ค.

     # 1์„ ๋บ€ ๊ฒฝ์šฐ ์—ฐ์‚ฐ ํšŸ์ˆ˜
     d[i] = d[i-1]  +1
     
     # 2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ
      if i%2 ==0:
        d[i] = min(d[i],d[i//2]+1)

     

     

    ์ „์ฒด ์ฝ”๋“œ

    x = int(input())
    
    d = [0] * 30001
    
    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)
      
      if i%5==0:
        d[i] = min(d[i],d[i//5]+1)
     
    print(d[x])

    2๏ธโƒฃ์‹ค์ „ ๋ฌธ์ œ 2 :๊ฐœ๋ฏธ ์ „์‚ฌ ๋ฌธ์ œ ํ’€์ด ๊ณผ์ •

    ๐Ÿœ๐Ÿœ

     

    ์•„์ง ๋ฌธ์ œ ํ’€์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ฐ”๋กœ ๋– ์˜ค๋ฅด์ง€ ์•Š๋Š”๋‹ค. ํ’€์ด๋ฅผ ๋ณด๊ณ  dp ๋ฌธ์ œ์— ์ต์ˆ™ํ•ด์ง€์ž! 

    n = int(input())
    
    array = list(map(int,input().split()))
    
    d =[0] * 100 
    
    
    d[0] = array[0]
    d[1] = max(array[0],array[1])
    
    
    for i in range(2,n):
      d[i] = max(d[i-1], d[i-2] + array[i])
    
    
    print(d[n-1])

     

     ๐Ÿซฑ๊ฒฝ์šฐ์˜ ์ˆ˜ 

     

       i-2 i-1 ํ˜„์žฌ

    ใ…ใ… ใ… ใ…

    1 ) i-2๋ฒˆ์งธ ์‹๋Ÿ‰์„ ํ„ด๋‹ค๋ฉด : ํ˜„์žฌ ์‹๋Ÿ‰์„ ํ„ธ ์ˆ˜ ์žˆ๋‹ค.

    2) i-1๋ฒˆ์งธ ์‹๋Ÿ‰์„ ํ„ด๋‹ค๋ฉด : ํ˜„์žฌ ์‹๋Ÿ‰์„ ํ„ธ ์ˆ˜ ์—†๋‹ค.

     

    ์ฆ‰ i-2๋ฒˆ์งธ ์‹๋Ÿ‰ + ํ˜„์žฌ ์‹๋Ÿ‰ VS i-1 ๋ฒˆ์งธ ์‹๋Ÿ‰ ์ค‘ ๋” ๋งŽ์€ ์‹๋Ÿ‰์„ ํ„ธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

     

    ๐Ÿซฑ๊ตฌํ˜„ ์š”์†Œ

    d๋Š” ๋” ๋งŽ์€ ์‹๋Ÿ‰์„ ํ„ธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ €์žฅ๋œ dp ํ…Œ์ด๋ธ”์ด๋‹ค. 

    ์ธ๋ฑ์Šค์— ๋”ฐ๋ผ์„œ ์ฐจ๋ก€๋Œ€๋กœ ํ˜„์žฌ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ค‘ ๊ฐ€์žฅ ์‹๋Ÿ‰์„ ๋งŽ์ด ํ„ธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์„ ํƒ๋œ๋‹ค.

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

    3๏ธโƒฃ์‹ค์ „ ๋ฌธ์ œ 3 : ๋ฐ”๋‹ฅ ๊ณต์‚ฌ 

    * ํƒ€์ผ๋ง ๋ฌธ์ œ 

     

    ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ : ๊ฐ€๋กœ * ์„ธ๋กœ = N * 2 ์ธ ๋ฐ”๋‹ฅ์„ ์ฑ„์šฐ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ 

    ์ถœ๋ ฅ : ๋ฐ”๋‹ฅ์„ ์ฑ„์šฐ๋Š” ๋ฐฉ๋ฒ•์„ 796796์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ 

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

     

    ๊ทผ๋ฐ ์ฝ”๋“œ๊ฐ€ ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค.

     

    d[1] ์€ 1๊ฐ€์ง€ ๊ฒฝ์šฐ

    d[2] ์€ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

     

    d[3] ์€ d[2] + d[1] * 2   = 5๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค.

     

    d[4] ๋Š” d[3] + d[2] * 2  =11๊ฐ€์ง€ ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฐ€์ง„๋‹ค. 

     

    ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ”๋˜ ๋ถ€๋ถ„์€ 2์นธ์ด ๋‚จ์•˜์„ ๋•Œ ๊ฐ€๋กœ * ์„ธ๋กœ = 1*2 ์ธ ํƒ€์ผ 2๊ฐœ๋กœ๋„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ ์ด๊ฑด ๊ณ ๋ คํ•˜์ง€ ์•Š์„๊นŒ? ์‹ถ์—ˆ๋Š”๋ฐ ์ด๊ฑด 1์นธ์ด ๋‚จ์€ ๊ฒฝ์šฐ์—์„œ ๊ณ ๋ ค๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ๊ตฌ์„ฑ๋˜๋Š” ํƒ€์ผ ํ˜•ํƒœ๊ฐ€ ๋™์ผํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๊ณ ๋ ค๋˜๋Š” ๊ฒƒ์ด์—ˆ๋‹ค! ๐Ÿค—


    4๏ธโƒฃ์‹ค์ „ ๋ฌธ์ œ 4 : ํšจ์œจ์ ์ธ ํ™”ํ ๊ตฌ์„ฑ ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

    ์œผ์•„..... dp ๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผํ• ์ง€ ํ˜ผ์ž์„œ๋Š” ์•„์ง ๊ฐ์ด ์•ˆ์žกํžŒ๋‹ค. ๋ฌธ์ œ ํ’€์ด๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌํ•ด๋ณด์ž!!! 

     

    ์˜ˆ๋ฅผ ๋“ค์–ด N = 3์ด๊ณ  K= 7์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž ! ์—ฌ๊ธฐ์„œ K๋Š” ํ™”ํ์˜ ๋‹จ์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    ๊ฐ ํ™”ํ์˜ ๋‹จ์œ„๋Š” 2, 3, 5์ด๋‹ค.

    ๐Ÿซฑ ๊ฒฝ์šฐ์˜ ์ˆ˜

    ๊ธˆ์•ก i๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ™”ํ ๊ฐœ์ˆ˜ ai, ํ™”ํ ๋‹จ์œ„ k๋ผ๊ณ  ํ•  ๋•Œ

    a i-k๋Š” ๊ธˆ์•ก i-k๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ํ™”ํ ๊ฐœ์ˆ˜ 

     

    ai-k ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•  ๊ฒฝ์šฐ : a i = min(ai, ai-k + 1)

    - ai-k๋Š” a[i]์— ๊ธˆ์•ก k๋ฅผ ํ•˜๋‚˜ ๋”ํ•˜๋ฉด ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

    ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ : ai = 10,001

    ๐Ÿซฑ์ดˆ๊ธฐ ๋ฆฌ์ŠคํŠธ ์„ค์ •ํ•˜๊ธฐ 

    ๊ฐ ์ธ๋ฑ์Šค๋ฅผ 10,001๋กœ ์„ค์ •ํ•œ๋‹ค. 

    ์šฐ๋ฆฌ ๋ฌธ์ œ์—์„œ ๊ธˆ์•ก์˜ ์ตœ๋Œ€๊ฐ’์€ 10,000์ด๋‹ค. ๋”ฐ๋ผ์„œ 10,001์€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ธˆ์•ก์ด๋‹ค. ์ฆ‰, ํŠน์ • ๊ธˆ์•ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํ™”ํ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

    0์›์˜ ๊ฒฝ์šฐ, ํ™”ํ๋ฅผ ํ•˜๋‚˜๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ 0์ธ๋ฑ์Šค ๊ฐ’์œผ๋กœ 0์„ ์„ค์ •ํ•œ๋‹ค.

     

    ๐Ÿซฑํ™”ํ ๋‹จ์œ„ ํ™•์ธํ•˜๊ธฐ 

    ํ˜„์žฌ ์—ฐ์‚ฐ์—์„œ ๊ฐ€์žฅ ์ตœ์†Œ์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“œ๋Š” ์—ฐ์‚ฐ์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค. 

    ๋”ฐ๋ผ์„œ ๊ฐ€์žฅ ์ตœ์†Œ๋กœ ๋งŒ๋“œ๋Š” ์—ฐ์‚ฐ์€ ์„ ํƒํ•˜๊ณ  ์ด๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

     

    ๊ฐ€์žฅ ๋จผ์ € ์ฒซ ๋ฒˆ์งธ ํ™”ํ๋‹จ์œ„์ธ 2๋ถ€ํ„ฐ ํ™•์ธํ•ด๋ณด์ž.

    2๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ถ€ํ„ฐ dp ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ํ•˜๊ธฐ

     

    ์ธ๋ฑ์Šค 2์˜ ๊ฒฝ์šฐ 1์ด๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋Š” 2์› ์งœ๋ฆฌ ํ™”ํ ํ•˜๋‚˜๋ฅผ ์ด์šฉํ•˜์—ฌ 2์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. 

    ์ธ๋ฑ์Šค 4์˜ ๊ฒฝ์šฐ 2๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋Š” 2์› ์งœ๋ฆฌ ํ™”ํ 2๊ฐœ๋ฅผ ์ด์šฉํ•˜์—ฌ 2+2 = 4์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

    ๋ช‡ ์ธ๋ฑ์Šค๋Š” 10,001 ๊ฐ’์„ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋Š” 2์›์œผ๋กœ ๊ตฌ์„ฑํ• ์ˆ˜ ์—†๋Š” ๊ธˆ์•ก์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

     

    A2 = A0 + 1

    A4 = A2 + 1

     

    ์ด์ œ ํ™”ํ ๋‹จ์œ„ 3์„ ํ™•์ธํ•ด๋ณด์ž

    2์™€ 3์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ถ€ํ„ฐ dp ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ํ•˜๊ธฐ

     

    A5 = A2 + 1

    ์ธ๋ฑ์Šค 5๋Š” 2๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง€๋Š”๋ฐ ์ด๋Š” 2์›์งœ๋ฆฌ ํ™”ํ 1๊ฐœ, 3์›์งœ๋ฆฌ ํ™”ํ 1๊ฐœ๋กœ 2 + 3 = 5์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

     

    ์ด์ œ ํ™”ํ ๋‹จ์œ„ 5์„ ํ™•์ธํ•ด๋ณด์ž

    2, 3, 5๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ถ€ํ„ฐ dp ํ…Œ์ด๋ธ”์„ ๊ฐฑ์‹ ํ•˜๊ธฐ

     

    A 7 = A2 + 1๋กœ 2๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง„๋‹ค. 2์›์งœ๋ฆฌ ํ™”ํ ํ•˜๋‚˜๋ž‘ 5์›์งœ๋ฆฌ ํ™”ํ 1๊ฐœ๋กœ 2 + 5 = 7์›์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

    ์›๋ž˜ ์ด์ „ ๋‹จ๊ณ„์—์„œ A7์˜ ๊ฐ’์€ 3์ด์—ˆ๋Š—๋„ค, ์ด๋Š” 2 + 2 + 3 = 7์›์œผ๋กœ 3๊ฐœ์˜ ํ™”ํ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋ฅผ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

     

    ๊ทธ๋Ÿฌ๋‚˜ 2 + 5 = 7์›์„ ๋งŒ๋“ค๋ฉด ํ™”ํ๋ฅผ 2๊ฐœ๋งŒ ์‚ฌ์šฉํ•ด๋„ ๋˜๋ฏ€๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.

     

    ๊ฒฐ๊ณผ์ ์œผ๋กœ 7์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์ตœ์†Œ์˜ ํ™”ํ ๊ฐœ์ˆ˜๋Š” 2๊ฐœ์ด๋‹ค.

     

    # ์ž…๋ ฅ๋ฐ›๊ธฐ
    n,m = int(input().split)
    n_list=[]
    
    for _ in range(n):
      n_list.append(int(input().split()))
    
    # ํ•œ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ DP ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
    d = [100001] * (m+1)
    
    # dp ๊ตฌํ˜„
    
    d[0]= 0
    for i in range(n):
      for j in range(n_list[i] , m + 1):
        if d[j - n_list[i]] != 10001:
          d[j] = min( d[j], d[ j - n_list[i] ] +1)
    
    if d[m] == 10001:
      print(-1)
    else:
      print(d[m])

     

     

    ์ด ๋กœ์ง์„ ๋‹ค์‹œ ์ดํ•ดํ•ด๋ณด์ž ! ! ! 

     

    ์œ„์—์„œ ์•Œ์•„๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ํ™”ํ ๋‹จ์œ„ ๋ณ„๋กœ dp ํ…Œ์ด๋ธ”๊ฐฑ์‹ 

    for i in range(n):
      for j in range(n_list[i] , m + 1):
        if d[j - n_list[i]] != 10001:
          d[j] = min( d[j], d[ j - n_list[i] ] +1)

     

    ์—ฌ๊ธฐ์„œ d[j - n_list[i]] ์™€ n_list[i]๋ฅผ ๋”ํ•˜๋ฉด ์›ํ•˜๋Š” ๊ธˆ์•ก์ด ๋œ๋‹ค

    ๋”ฐ๋ผ์„œ d[j]์™€ ์ด์ „ ๊ธˆ์•ก์— ๊ธˆ์•ก์„ ๋”ํ•ด์„œ ์–ป์€ ์ˆ˜ ์ค‘ ์ž‘์€ ๊ฒƒ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.


    ๋ฐฑ์ค€์˜ 1,2,3 ๋งŒ๋“ค๊ธฐ ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ 

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

     

    test = int(input())
    
    def sum_func(x):
      if x==1:
        return 1
      elif x==2:
        return 2
      elif x==3:
        return 4
      else:
        return sum_func(x-1) + sum_func(x-2) + sum_func(x-3)
      
                                 
    for _ in range(0,test):
      n = int(input())
      print(sum_func(n))

     

    ๊ทœ์น™์„ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ์ƒ๊ฐํ•ด๋ณด์ž.

    ๊ทœ์น™์„ ๋ชจ๋ฅผ ๋•Œ์—๋Š” ํ•œ๋ฒˆ n = 1์ผ ๋•Œ 2์ผ ๋•Œ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉฐ ๋‚˜์—ดํ•ด๋ณด์ž 

    n=4์ธ ๊ฒฝ์šฐ

    1, 2, 3์„ ๋”ํ•ด์„œ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด ๊ฒฝ์šฐ๋Š” ์•„๋ž˜ 3๊ฐ€์ง€ ์ผ€์ด์Šค๋กœ ๋‚˜๋‰œ๋‹ค. 

     

    1 + 3

    1์— 3์„ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 3์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค 

    ์—ฌ๊ธฐ์„œ๋Š” 1 + 1+ 1 , 1 + 2, 2 + 1 , 3 ์œผ๋กœ 4๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

     

    2 + 2 

    2์— 2์„ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 2์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค 

    ์—ฌ๊ธฐ์„œ๋Š” 1 + 1, 2 ๋กœ 2๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

     

    3 + 1

    3์— 1์„ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 1์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค  

    ์—ฌ๊ธฐ์„œ๋Š” 1๋กœ 1๊ฐ€์ง€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

     

     

    ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด๋ณด๋‹ˆ ๊ฐ ๊ฒฝ์šฐ๋งˆ๋‹ค ๊ทœ์น™์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    4๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 3์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ + 2๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ + 1์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋กœ ํ‘œํ˜„๋˜์—ˆ๋‹ค.

    5๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋„ 4๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ + 3์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ + 2๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ํ‘œํ˜„๋˜์—ˆ๋‹ค.

     

    ๋”ฐ๋ผ์„œ x๋ผ๋Š” ํ•ฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    sum_func(x-1) + sum_func(x-2) + sum_func(x-3)

     

    728x90