BOJ/๐Ÿฅˆ

โ˜…DP Intermediate I - 20 Solvedโ˜…

metamong 2022. 12. 22.

โ˜… 17202 ํ•ธ๋“œํฐ ๋ฒˆํ˜ธ ๊ถํ•ฉ โ˜…

 

A=list(input())
B=list(input())
l=[]
for i in range(8):l.extend((int(A[i]),int(B[i])))
while len(l)>2:
    L=len(l)
    for j in range(L-1):l[j]=(l[j]+l[j+1])%10
    del l[-1]
print(*l,sep='')

โ˜… 16395 ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜• โ˜…

 

 

n,k=map(int,input().split())
d=[0]*n
d[0]=1
if n==1:print(1)
else:
    for i in range(1,n):
        new=[]
        new.append(1)
        for j in range(i-1):
            new.append(d[i-1][j]+d[i-1][j+1])
        new.append(1)
        d[i]=new
    print(d[n-1][k-1])

 

๐Ÿ˜ป ์ „ํ˜•์ ์ธ DP ๋ฌธ์ œ โ‘  ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜• ์ธต ๊ฐœ์ˆ˜์— ๋งž๊ฒŒ dp list๋ฅผ ๋งŒ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น / โ‘ก ๊ฐ ์ธต ๋ณ„๋กœ ์œ„์˜ ์ธต์„ ์ฐธ์กฐํ•ด(๋ฐ”๋กœ ์œ„ ๋‘ ์›์†Œ์˜ ํ•ฉ ๊ฒฐ๊ณผ) ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋Œ€์ž… → 2์ฐจ์› list ์™„์„ฑ โ‘ข ์ฃผ์–ด์ง„ ์ธต์˜, ์ฃผ์–ด์ง„ ์ˆœ์„œ์˜ ์›์†Œ๋ฅผ 2์ฐจ์› list์—์„œ ์ถœ๋ ฅ. ์œ„ ์ธต์˜ ๋‘ ์›์†Œ๋ฅผ ์ฐธ์กฐ๋กœ ์•„๋ž˜ ์ธต์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋ฏ€๋กœ bottom-up ์ƒํ–ฅ์‹ dp ์œ ํ˜•. dp๋Š” ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ฐธ๊ณ ํ•ด ์‰ฝ๊ฒŒ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‚˜๊ฐ€๋ฉด์„œ, ์ฃผ์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์—์„œ ๊ฒฐ๊ณผ๋ฅผ ์ฑ„์šฐ๋Š” ์œ ํ˜•. ํŒŒ์Šค์นผ์˜ ์‚ผ๊ฐํ˜•์€ ์ดํ•ญ๊ณ„์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ณต์‹์œผ๋กœ ๋ฐ”๋กœ ํ’€๋ฆฌ์ง€๋งŒ, dp์˜ ์ •์„์— ๋งž๊ฒŒ ํ’€์–ด๋ด„!


โ˜… 15489 ํŒŒ์Šค์นผ ์‚ผ๊ฐํ˜• โ˜…

 

R,C,W=map(int,input().split())
dp=[]
dp.extend(([1],[1,1]))

for i in range(2,R+W-1):
    l=[]
    l.append(1)
    for j in range(1,i):
        l.append(dp[i-1][j-1]+dp[i-1][j])
    l.append(1)
    dp.append(l)
ans=0
p=1
for k in range(R-1,R+W-1):
    for t in range(C-1,C-1+p):
        ans+=dp[k][t]
    p+=1
print(ans)

 

๐Ÿ˜ป ์œ„ 16395 ๋ฌธ์ œ๋Œ€๋กœ ํŒŒ์Šค์นผ ์‚ผ๊ฐํ˜•์„ dp๋กœ ์™„์„ฑํ•œ ๋’ค, R๋ฒˆ์งธ C๋ฒˆ์งธ ์ˆ˜๋ฅผ ์‚ผ๊ฐํ˜• ์œ„ ๊ผญ์ง“์ ์œผ๋กœ ํ•˜๊ณ  ๋ณ€์ด W์ธ ์ •์‚ผ๊ฐํ˜• ๋‚ด๋ถ€์˜ ๋ชจ๋“  ์ˆ˜์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ. ์ด์ค‘ for๋ฌธ์œผ๋กœ โ‘  ๋จผ์ € k iterator๋กœ R์ธต๋ถ€ํ„ฐ R+W-1์ธต๊นŒ์ง€ ํ•ฉ์„ ๊ตฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด index ๊ธฐ์ค€ R-1๋ถ€ํ„ฐ R+W-2๊นŒ์ง€, ์ฆ‰ range(R-1,R+W-1) / โ‘ก ์ด์ œ ๊ฐ k์ธต์—์„œ C๋ฒˆ์งธ๋ถ€ํ„ฐ ์ธต ์ˆซ์ž๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ 1๊ฐœ, 2๊ฐœ, 3๊ฐœ ๋”ํ•ด์ง€๋ฏ€๋กœ p iterator๋ฅผ ๋”ฐ๋กœ ์„ค์ •ํ•ด range(C-1, C-1+p), p+=1


โ˜… 11726 2xn ํƒ€์ผ๋ง โ˜…

 

n=int(input())
if n==1:print(1)
else:
    dp=[0]*(n+1)
    dp[1]=1
    dp[2]=2
    for i in range(3,n+1):
        dp[i]=dp[i-1]+dp[i-2]
    print(dp[n]%10007)

 

๐Ÿ˜ป ์œ„ ๋ฌธ์ œ dp์˜ ์ ํ™”์‹์€ fibonacci์™€ ๊ฐ™๋‹ค. a(n)์„ 2xn ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์—์„œ ํƒ€์ผ์„ ์ฑ„์šฐ๋Š” ๊ฐœ์ˆ˜๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์ ํ™”์‹์€ ์ด์™€ ๊ฐ™๋‹ค. a(n) = a(n-1) + a(n-2) (a(1) = 1, a(2) = 2. ๋ณ€์˜ ๊ธธ์ด๊ฐ€ n-1์ผ ๊ฒฝ์šฐ 2x1 ์ง์‚ฌ๊ฐํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” 1๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ , ๋ณ€์˜ ๊ธธ์ด๊ฐ€ n-2์ผ ๊ฒฝ์šฐ, 1x2 ์ง์‚ฌ๊ฐํ˜• ๋‘๊ฐœ๋ฅผ ๊ฐ€๋กœ๋กœ ๋ˆ„์›Œ์„œ ์ถ”๊ฐ€ํ•˜๋Š” 1๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ ๊ฐ๊ฐ n-1, n-2์ผ๋•Œ์˜ ๋ฐฉ๋ฒ•์„ ๋”ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. dp-table์˜ ์ฒซ ์Šคํƒ€ํŠธ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ธฐํ•ญ๋“ค์„ ์ž˜ ์„ค์ •๋งŒ ์ฃผ์˜

 


โ˜… 11727 2xn ํƒ€์ผ๋ง 2 โ˜…

 

n=int(input())
if n==1:print(1)
else:
    dp=[0]*(n+1)
    dp[1]=1
    dp[2]=3
    for i in range(3,n+1):
        dp[i]=dp[i-1]+2*dp[i-2]
    print(dp[n]%10007)

 

๐Ÿ˜ป ์œ„ 11726 dp๋ฌธ์ œ์—์„œ 2x2 ์ •์‚ฌ๊ฐํ˜•์ด ์ถ”๊ฐ€๋œ ๋ฌธ์ œ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด a(n-2)๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ 2xn ํƒ€์ผ์„ ์ฑ„์šธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ํ•ญ๋งŒ 2๋ฅผ ๊ณฑํ•ด ์ ํ™”์‹์„ ์™„์„ฑํ•˜๋ฉด ๋œ๋‹ค. a(n)์„ 2xn ํฌ๊ธฐ์˜ ์ง์‚ฌ๊ฐํ˜•์—์„œ ํƒ€์ผ์„ ์ฑ„์šฐ๋Š” ๊ฐœ์ˆ˜๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์ ํ™”์‹์€ a(n) = a(n-1) + 2*a(n-2) (a(1) = 1, a(2) = 3). ๋ณ€์˜ ๊ธธ์ด๊ฐ€ n-1์ผ ๊ฒฝ์šฐ 2x1 ์ง์‚ฌ๊ฐํ˜•์„ ์ถ”๊ฐ€ํ•˜๋Š” 1๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ณ , ๋ณ€์˜ ๊ธธ์ด๊ฐ€ n-2์ผ ๊ฒฝ์šฐ, 1x2 ์ง์‚ฌ๊ฐํ˜• ๋‘๊ฐœ๋ฅผ ๊ฐ€๋กœ๋กœ ๋ˆ„์›Œ์„œ ์ถ”๊ฐ€, 2x2 ์ •์‚ฌ๊ฐํ˜• 1๊ฐœ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์˜ ๊ธธ์ด๊ฐ€ ๊ฐ๊ฐ n-1, n-2์ผ๋•Œ์˜ ๊ฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. (์—ญ์‹œ 11726 ์œ„ ๋ฌธ์ œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ดˆ๊ธฐํ•ญ ์ฃผ์˜)


โ˜… 1463 1๋กœ ๋งŒ๋“ค๊ธฐ โ˜…

 

n=int(input())
dp=[0]*(n+1)
if n==1:print(0)
elif n==2:print(1)
else:
    dp[2],dp[3]=1,1
    for i in range(4,n+1):
        a,b,c=1000001,1000001,1000001
        if i%3==0:
            a=dp[i//3]
        if i%2==0:
            b=dp[i//2]
        c=dp[i-1]
        dp[i]=min(a,b,c)+1
    print(dp[n])

 

๐Ÿคก dp-table์˜ element๋Š” ๊ฐ๊ฐ ์—ฐ์‚ฐ์„ ํ•˜๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’. dp[n]์„ ๊ธฐ์ค€์œผ๋กœ, dp[n//3], dp[n//2], dp[n-1]์—์„œ ๊ฐ๊ฐ 3์„ ๊ณฑํ•˜๊ณ , 2๋ฅผ ๊ณฑํ•˜๊ณ  1์„ ๋”ํ•˜๋Š” 1๋ฒˆ์˜ ์—ฐ์‚ฐ ์ค‘ ์ตœ์†Ÿ๊ฐ’ ๊ฒฐ๊ณผ๋กœ dp[n]์— ๋„๋‹ฌ ๊ฐ€๋Šฅ. ์ ํ™”์‹์„ ์„ธ์šฐ๋ฉด a(n) = min(a(n//3), a(n//2), a(n-1) + 1)


โ˜… 1904 01 ํƒ€์ผ โ˜…

 

N=int(input())
if N==1:print(1)
elif N==2:print(2)
else:
    dp=[1,2]
    for _ in range(N-2):
        dp.append((dp[-2]+dp[-1])%15746)
    print(dp[-1]%15746)

 

๐Ÿคก ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด dp๋ฌธ์ œ. dp[x]์ธ ๊ธธ์ด๊ฐ€ x์ธ 2์ง„ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ๋งจ ์•ž์— 1์ด ์˜ฌ ๊ฒฝ์šฐ dp[x-1], ๊ทธ๋ฆฌ๊ณ  ๋งจ ์•ž์— 00์ด ์˜ฌ ๊ฒฝ์šฐ dp[x-2]์˜ ๋‘ ๊ฐ€์ง€ ์ƒํ™ฉ๋งŒ ์กด์žฌํ•˜๋ฏ€๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ dp[x] = dp[x-1] + dp[x-2]


โ˜… 9461 ํŒŒ๋„๋ฐ˜ ์ˆ˜์—ด โ˜…

 

for _ in range(int(input())):
    dp=[0,1,1,1,2,2,3,4,5]
    N=int(input())
    if N<=8:print(dp[N])
    else:
        dp.extend([0]*(N-8))
        for i in range(9,N+1):
            dp[i]=dp[i-1]+dp[i-5]
        print(dp[N])

 

๐Ÿ˜ป N์ด 9์ด์ƒ์ผ ๋•Œ ๋ถ€ํ„ฐ ์‚ผ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด๋Š” ๊ทœ์น™์ƒ ์•ž์˜ P๊ฐ’๊ณผ 5๊ณ„๋‹จ ์•ž์˜ P๊ฐ’์„ ๋”ํ•œ ๊ฒฐ๊ณผ์ด๋‹ค. ์ ํ™”์‹์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด P(N) = P(N-1) + P(N-5) (N≥9). N์ด 8์ดํ•˜์ผ ๊ฒฝ์šฐ P(N)์€ N์ด 1์ผ ๋•Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ 1, 1, 1, 2, 2, 3, 4, 5


โ˜… 9095 1, 2, 3 ๋”ํ•˜๊ธฐ โ˜…

 

for _ in range(int(input())):
    dp=[0,1,2,4]
    n=int(input())
    if n<=3:print(dp[n])
    else:
        dp.extend([0]*(n-3))
        for i in range(4,n+1):
            dp[i]=dp[i-1]+dp[i-2]+dp[i-3]
        print(dp[n])

 

๐Ÿ˜ป n์„ 1,2,3์˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์ง“์ˆ˜๋ฅผ a(n)์ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, 1์„ ๋บ€ ์ˆ˜์˜ ๊ฐ€์ง“์ˆ˜์—์„œ 1์„ ๋”ํ•˜๋Š” 1๊ฐ€์ง€ ๊ฒฝ์šฐ, 2๋ฅผ ๋บ€ ์ˆ˜์˜ ๊ฐ€์ง“์ˆ˜์—์„œ 2๋ฅผ ๋”ํ•˜๋Š” 1๊ฐ€์ง€ ๊ฒฝ์šฐ, 3์„ ๋บ€ ์ˆ˜์˜ ๊ฐ€์ง“์ˆ˜์—์„œ 3์„ ๋”ํ•˜๋Š” 1๊ฐ€์ง€ ๊ฒฝ์šฐ๋กœ ์ด 3๊ฐ€์ง€ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ 2๋ฅผ ๋บ€ ์ˆ˜์˜ ๊ฐ€์ง“์ˆ˜์—์„œ 2๋ฅผ ๋”ํ•˜๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, 1์„ 2๋ฒˆ ๋”ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๊ณ ๋ ค๋  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ด๋Š” ์ด๋ฏธ 1์„ ๋บ€ ์ˆ˜์˜ ๊ฐ€์ง“์ˆ˜์—์„œ 1์„ ๋”ํ•˜๋Š” ๊ฒฝ๋กœ์— ์นด์šดํŠธ๋˜์—ˆ์œผ๋ฏ€๋กœ ๋ฐฐ์ œ. 3์„ ๋บ€ ๊ฒฝ์šฐ์˜ ์ˆ˜์—์„œ๋„ ๊ณ ๋ ค. ์ ํ™”์‹์„ ์ •๋ฆฌํ•˜์ž๋ฉด a(n) = a(n-1) + a(n-2) + a(n-3) (a(1) = 1, a(2) = 2, a(3) = 4)


โ˜… 15312 ์ด๋ฆ„ ๊ถํ•ฉ โ˜…

 

A=list(input())
B=list(input())
l=[]
lines='32123323322122122212111221'
alphas='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in range(len(A)):l.extend((int(lines[alphas.index(A[i])]),int(lines[alphas.index(B[i])])))
while len(l)>2:
    L=len(l)
    for j in range(L-1):l[j]=(l[j]+l[j+1])%10
    del l[-1]
print(*l,sep='')

 

๐Ÿ˜ป ์ƒˆ๋กœ dp-table์„ ๋งŒ๋“ค๊ธฐ์—๋Š” ์ตœ๋Œ€ 400๋งŒ๊นŒ์ง€ list๊ฐ€ ๋Š˜์–ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ, ๊ธฐ์กด list์—์„œ bottom-up ๋ฐฉ์‹์œผ๋กœ dp-table์„ updateํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์งฐ์Œ. ๋‘ ์›์†Œ๋ฅผ ๋”ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์•ž ์›์†Œ๊ฐ’๊ณผ ๋ฐ”๊พธ๋ฉด์„œ ๊ณ„์† updateํ•˜๋Š” ์—ญ์‹œ ์ „ํ˜•์ ์ธ dp ๋ฌธ์ œ


โ˜… 14495 ํ”ผ๋ณด๋‚˜์น˜ ๋น„์Šค๋ฌด๋ฆฌํ•œ ์ˆ˜์—ด โ˜…

 

#f(n)=f(n-1)+f(n-3)
n=int(input())
if n<=3:print(1)
else:
    dp=[0,1,1,1]
    for i in range(4,n+1):
        dp.append(dp[i-1]+dp[i-3])
    print(dp[n])

 

๐Ÿ˜ป ์ ํ™”์‹ a(n) = a(n-3) + a(n-1)


โ˜… 13699 ์ ํ™”์‹ โ˜…

 

n=int(input())
if n==0:print(1)
else:
    dp=[1]*(n+1)
    for i in range(1,n+1):
        term=0
        for j in range(0,i):
            term+=(dp[j]*dp[(i-1-j)])
        dp[i]=term
    print(dp[-1])

 

๐Ÿ˜ป ์ ํ™”์‹์˜ j๊ฐ€ 0๋ถ€ํ„ฐ i-1๊นŒ์ง€ ์ญ‰ ๋Œ์•„์•ผ ํ•˜๋ฏ€๋กœ bottom-up ๋ฐ˜๋ณต๋ฌธ์ด๋˜, ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ. t(n) = t(0)*(tn-1) + t(1)*t(n-2) + ... + t(n-1)*t(0)


โ˜… 2491 ์ˆ˜์—ด โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
l=list(map(int,input().split()))

dpi=[1]*N
dpd=[1]*N

for i in range(1,N):
    if l[i-1]<=l[i]:
        dpi[i]=(dpi[i-1]+1)
    if l[i-1]>=l[i]:
        dpd[i]=(dpd[i-1]+1)
print(max(dpi+dpd))

 

๐Ÿ˜ป LIS๋Š” ์—ฐ์†์„ฑ ์—†์ด ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด์ง€๋งŒ, ํ•ด๋‹น ๋ฌธ์ œ๋Š” ์—ฐ์†ํ•ด์„œ ๊ฐ™๊ฑฐ๋‚˜ ์ฆ๊ฐ€ํ•˜๋Š” / ๊ฐ™๊ฑฐ๋‚˜ ๊ฐ์†Œํ•˜๋Š” ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋ผ ๋ฐ”๋กœ ์ ํ™”์‹ ์„ธ์šฐ๋ฉด ๋œ๋‹ค. ์—ฐ์†ํ•ด์„œ ๊ฐ™๊ฑฐ๋‚˜ ์ฆ๊ฐ€ / ์—ฐ์†ํ•ด์„œ ๊ฐ™๊ฑฐ๋‚˜ ๊ฐ์†Œํ•˜๋Š” ๊ฐ๊ฐ์˜ dp ๋งŒ๋“ค์–ด ์ง„ํ–‰ํ•œ๋‹ค. dpi[i] = dpi[i-1] + 1 (if l[i]≥l[i-1])  / dpd[i] = dpd[i-1] + 1 (if l[i]≤l[i-1]) ๋‘ dp-table ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ตฌํ•˜๋ฉด ๋!


โ˜… 25644 ์ตœ๋Œ€ ์ƒ์Šน โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
a=list(map(int,input().split()))
dp=[0]*N
cur_min=a[0]
for i in range(1,N):
    if a[i-1]<cur_min: cur_min=a[i-1]
    dp[i]=(a[i]-cur_min)
print(max(dp))

 

๐Ÿ˜ป ์ ํ™”์‹ dp[i]๋Š” a[i]๋ฅผ ์‚ฌ๋Š” ๊ฒฝ์šฐ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์ด๋ผ๋ฉด, greedy์— ์˜ํ•ด ์‚ฌ๊ณ  ํŒ”์•„์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ด์ต์€ ์ผ๋‹จ ์‚ฌ๋Š” ๊ฒฝ์šฐ๋Š” a[i]๋กœ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ, ํŒŒ๋Š” ๊ธˆ์•ก์ด ์ตœ์†Œ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ dp๋กœ ๋Œ๋ฉด์„œ ์•ž์˜ ๋ชจ๋“  ์›์†Œ๋“ค์˜ ํŒŒ๋Š” ๊ธˆ์•ก ์ตœ์†Ÿ๊ฐ’ update.  ์ ํ™”์‹์€ dp[i] = a[i] - min(cur) (min(cur)์€ ํ˜„์žฌ i-1๋ฒˆ์งธ ๊นŒ์ง€์˜ ์›์†Œ ์ค‘ ์ตœ์†Ÿ๊ฐ’). dp-table์ด ์™„์„ฑ๋˜๋ฉด, ์ด element ์ค‘ ์ตœ๋Œ“๊ฐ’์ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ธˆ์•ก์˜ ์ตœ๋Œ“๊ฐ’์œผ๋กœ ์ •๋‹ต์ด ๋œ๋‹ค.


โ˜… 25214 ํฌ๋ฆผ ํŒŒ์Šคํƒ€ โ˜…

 

import sys
input=sys.stdin.readline
N=int(input())
dp=[0 for _ in range(N)]
As=list(map(int,input().split()))

cur_min=As[0]

for i in range(1,N):
    dp[i]=max(dp[i-1],As[i]-cur_min)
    cur_min=min(cur_min,As[i])
print(*dp)

 

๐Ÿ˜ป ๋ฌธ์ œ์˜ ์‹์„ ํ•ด์„ํ•ด๋ณด๋ฉด, element๋ฅผ ๊ณ„์† ์ถ”๊ฐ€ํ•  ๋•Œ ๋งˆ๋‹ค index๊ฐ€ ํฐ ์›์†Œ์—์„œ index๊ฐ€ ์ž‘์€ ์›์†Œ๋ฅผ ๋บ€ ๊ฐ’ ์ค‘ ์ตœ๋Œ“๊ฐ’์„ ๊ณ„์† updateํ•˜๋Š”, dp-table์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ. greedy์— ์˜ํ•ด ํ•ด๋‹น ์ฐจ์ด์˜ ์ตœ๋Œ“๊ฐ’์€, ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์›์†Œ์˜ ๊ธฐ์ค€์—์„œ, ์•ž์—์„œ ์ฃผ์–ด์ง„ ์›์†Œ ์ค‘ ์ตœ์†Ÿ๊ฐ’์„ ๋บ€ ๊ฒฝ์šฐ์ด๋‹ค. dp[i]๋Š” element๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด์„œ ์ƒ๊ธฐ๋Š” list๋‚ด ๋‘ element์˜ ์ฐจ์ด ์ตœ๋Œ“๊ฐ’. dp[i] = max(dp[i-1], As[i] - min(cur)) (As๋Š” ์›์†Œ list, cur_min์€ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ํ˜„ ์ตœ์†Ÿ๊ฐ’)


โ˜… 14494  ๋‹ค์ด๋‚˜๋ฏน์ด ๋ญ์˜ˆ์š”? โ˜…

 

n,m=map(int,input().split())
dp=[[0]*m for _ in range(n)]
dp[0][0]=1

for i in range(n):
    for j in range(m):
        if i==0: dp[i][j]=1
        elif j==0: dp[i][j]=1
        else:dp[i][j]=(((dp[i-1][j]%1_000_000_007)+(dp[i][j-1]%1_000_000_007)+(dp[i-1][j-1]%1_000_000_007))%1_000_000_007)

print(dp[n-1][m-1])

 

๐Ÿ˜ป 2์ฐจ์› ๋ฐฐ์—ด dp ์ „ํ˜•์ ์ธ ๋ฌธ์ œ. ์œ„ / ์•„๋ž˜ / ์™ผ์ชฝ ๋Œ€๊ฐ์„  ๊ฐ๊ฐ์˜ ์ด ์„ธ ๋ฐฉํ–ฅ์—์„œ ์˜ค๋Š” ๊ฒฝ๋กœ์˜ ๋ชจ๋“  ํ•ฉ์œผ๋กœ ์—…๋ฐ์ดํŠธ. ์ ํ™”์‹์€ dp[i][j] = dp[i-1]j] + dp[i][j-1] + dp[i-1][j-1]


โ˜… 9655 ๋Œ ๊ฒŒ์ž„ โ˜…

 

N=int(input()) #~1000
dp=[0]*(1001)
dp[1],dp[2],dp[3]='SK','CY','SK'
if N<=3:
    print(dp[N])
else:
    for i in range(4,N+1):
        if dp[i-1] == 'SK':
            dp[i]='CY'
        else:
            dp[i]='SK'
    print(dp[N])

 

๐Ÿ˜ป ์•ž ์‚ฌ๋žŒ์ด SK๋ฉด CY, ์•„๋‹ˆ๋ฉด SK. ์•ž์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๊ทธ ๋‹ค์Œ ๊ฒŒ์ž„์˜ ์Šน์ž๊ฐ€ ๋ฐ”๋กœ ์ •ํ•ด์ง€๋Š” DP


โ˜… 9625 BABBA โ˜…

 

k=int(input())
dp=[[0,0] for _ in range(46)]
a,b=0,0
dp[1]=[0,1]
if k==1:
    print(*[0,1])
else:
    for x in range(2,k+1):
        dp[x][0] = dp[x-1][1] #A
        dp[x][1] = dp[x-1][0] + dp[x-1][1]#B
    print(*dp[k])

 

๐Ÿ˜ป A๋Š” B๋กœ ๋ฐ”๋€Œ๊ณ , B๋Š” BA๋กœ ๋ฐ”๋€Œ๋ฏ€๋กœ A๋Š” ์ด์ „ B์˜ ๊ฐœ์ˆ˜ / B๋Š” ์ด์ „ A์˜ ๊ฐœ์ˆ˜ + B์˜ ๊ฐœ์ˆ˜ 


โ˜… 9507 Generations of Tribbles โ˜…

 

import sys
input=sys.stdin.readline

dp=[0]*68
dp[0],dp[1]=1,1
dp[2]=2
dp[3]=4
for _ in range(int(input())):
    n=int(input())
    if n<=3:
        print(dp[n])
    else:
        for x in range(4,n+1):
            dp[x] = dp[x-1] + dp[x-2] + dp[x-3] + dp[x-4]
        print(dp[n])

โ˜… 15624 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 7 โ˜…

n=int(input())
BIG = 1000000007
if n == 0:
    print(0)
elif n == 1:
    print(1)
else:
    x,y=0,1
    for i in range(n):
        x,y=(x+y)%BIG, x%BIG
    print(x)

 

๐Ÿ˜ป ๋Œ€ํ‘œ์ ์ธ ํ”ผ๋ณด DP. x,y์— x+y,x๊ฐ๊ฐ ๋„ฃ์œผ๋ฉฐ ๋‘ ๋ณ€์ˆ˜ x,y๋งŒ์œผ๋กœ DP ์—…๋ฐ์ดํŠธํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์  ์‚ฌ์šฉ


๋Œ“๊ธ€