11055๋ฒ - ๊ฐ์ฅ ํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด
๊ฐ์ฅ ํฐ ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด์ ๊ตฌํ๋ ๋ฌธ์ ์
๋๋ค.
์ด์ ์ ํ์๋ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด์ ์์ฉํ ๋ฌธ์ ๋ผ๊ณ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
import copy
n = int(input())
lst = list(map(int,input().split()))
dp = copy.deepcopy(lst)
๋จผ์ dp๋ฅผ list์ ๋๊ฐ์ด ์ด๊ธฐํํด์ค๋๋ค. ์๋ํ๋ฉด ํ์ฌ ๋ฌธ์ ์์ ์ ์ผ ์๊ฒ ๋์ฌ ์ ์๋ ๊ฐ์ ๋ถ๋ถ ์์ด์ ํฉ์ฐ์ด๋ฏ๋ก ๊ฒฐ๊ณผ์ ์ผ๋ก ์๊ธฐ ์์ ์ ๋๋ค.
for i in range(len(lst)):
for j in range(i):
if lst[i] > lst[j]:
dp[i] = max(dp[i],lst[i]+dp[j])
๊ทธ๋ฆฌ๊ณ ํ์ฌ ์กฐ์ฌ์ค์ธ ์ธ๋ฑ์ค๊ฐ ์ด์ ์ธ๋ฑ์ค๋ณด๋ค ๋ ํฌ๋ค๋ฉด ํ์ฌ dp๊ฐ๊ณผ ๊ทธ ์ด์ ์ธ๋ฑ์ค์ dp๊ฐ + ํ์ฌ ์ธ๋ฑ์ค์ ํฉ์ฐ์ ๋์กฐํ์ฌ ๋ ํฐ๊ฐ์ ํ์ฌ ์ธ๋ฑ์ค์ dp๊ฐ์ ๋์
ํด์ค๋๋ค.
ํด๋น ๋ฌธ์ ํ ์ผ๋๋ก๋ผ๋ฉด ์ด๋ฐ์ฉ์ผ๋ก ๋์ต๋๋ค.
print(max(dp))
๋ง์ง๋ง์ผ๋ก dp ์ถ๋ ฅํด์ฃผ๋ฉด ๋ฉ๋๋ค.
1965๋ฒ - ์์๋ฃ๊ธฐ
๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด์ ๋ฌธ์ ํํ ๋ฌธ์ ์ ๋๋ค.
n = int(input())
lst = list(map(int,input().split()))
dp = [1]*len(lst)
1์ด ์์ด์ ์ต์๊ฐ์ด๋ฏ๋ก ๋ฐ์์ฃผ๊ณ (์ฌ๊ธฐ์ ๋ฐ์ค)
for i in range(len(lst)):
for j in range(i):
if lst[i] > lst[j]:
dp[i] = max(dp[i],dp[j]+1)
ํ์ฌ๊ฐ์ด ์ด์ ๊ฐ๋ณด๋ค ํฌ๋ค๋ฉด ํ์ฌ๊ฐ์ dp์ ์ด์ ๊ฐ์ dp + 1๊ฐ์ ๋น๊ตํด ๋ ํฐ ๊ฐ์ ํ์ฌ๊ฐ์ dp๋ก ๋ฃ์ด ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ์์ด์ ๊ตฌ์ฒดํํด์ค์๋ค.
print(max(dp))
max(dp)์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
15988๋ฒ - 1,2,3 ๋ํ๊ธฐ 3
์๊ฐ์ด๊ณผ๋ฅผ ํผํ๊ธฐ ์ ๋ง์ ๋ง ์ด๋ ค์ด ๋ฌธ์ ์ ๋๋ค.
์ผ๋จ ์ถ๊ฐ ์๊ฐ ์์์ ๋ณด์๋ง์ ๋จ์ ์ฌ๊ท๋ ๋ฐฑํธ๋ํน์ผ๋ก๋ ์ ๋ ์๊ฐ ์์ ๋ชป๋ง์ถ๋ค๊ณ ๋ด์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์กฐ๊ฑด์ค์ ๊ฐ ํ
์คํธ ์ผ์ด์ค๋ง๋ค, n์ 1, 2, 3์ ํฉ์ผ๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ์๋ฅผ 1,000,000,009๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ถ๋ ฅํ๋ค.
๋ผ๋ ๋ง์ด ์์ผ๋ฉด DP๋ผ๊ณ ๋ณด๋๊ฒ ํ๋นํ๊ฒ ์ฃ ...
์์ ๊ฐ์ ๊ณผ์ ์ผ๋ก dp[n] = dp[n-1]+dp[n-2]+dp[n-3]์ด๋ผ๋ ์ ํ์ ๋์ถ์ด ๊ฐ๋ฅํฉ๋๋ค.
T = int(input())
ans = []
for _ in range(T):
ans.append(int(input()))
ํ ์คํธ์ผ์ด์ค๋ฅผ ๋ฐ์ ans์ ์ถ๊ฐํด์ฃผ๊ฒ ์ต๋๋ค.
memo = [0]*(max(ans)+1)
memo[0] = 1
memo[1] = 2
memo[2] = 4
memo[2]๊น์ง๋ ์ ํ์์์ ์์์ทจ๊ธ ๋ ์๋ ์์ผ๋ฏ๋ก 2๊น์ง ์ด๊ธฐํ๋ฅผ ์งํํด์ค์๋ค. ์๊ฐ์ ์๋ผ๊ธฐ ์ํด ํ ์คํธ์ผ์ด์ค ์ค ์ ์ผ ํฐ ๊ฐ๋ง ๋๋ฆฌ๊ณ ๋๋จธ์ง๋ ๋ฉ๋ชจ ์ฐธ๊ณ ํ์ฌ ๋ต์ ์ถ๋ ฅํ๋ ค ํ์ต๋๋ค.
recursion(max(ans))
์ด์ ์ฌ๊ท๋ฅผ ๋๋ ค์ค๋๋ค.
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
์๊ฐ ์ ์ฝ์ ์ํด sysinput๊ณผ ์ฌ๊ท depth ์ํ์ ํด์ ํด์ฃผ๊ณ
def recursion(n):
if memo[n]:
return memo[n]
memo[n] = ( recursion(n-1) + recursion(n-2) + recursion(n-3) )%1000000009
return memo[n]
๋ฉ๋ชจ์ด์ ์ด์
์ ์์ผ๋ฉด memo[n]์ return, ์๋๋ผ๋ฉด ์ ํ์์์ ์ ์์ ๋๋ ๊ฐ์ return ํด์ค์๋ค.
1000000009๋ฅผ ์ง๊ธ ๋๋ ์ฃผ๋ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ ํ์ผ๋ก ์ธํด ์๋ธ๊ฐ ์๋๋ ์ํฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด์์
๋๋ค.
(๋ถ๋ฐฐ๋ฒ์น / ๋ชจ๋๋ฌ ์ฑ์ง์ ์๊ฑฐํด ์ ๊ธฐ์ ๋๋๋ ๋ต ์ง์ ์ ๋๋๋ ๊ฐ ์ถ๋ ฅ์ ์ฐจ์ด๋ ์์ต๋๋ค.)
for values in ans:
print(memo[values-1])
์ถ๋ ฅ์์ผ์ฃผ๋ฉด
๋ต์ ์ ๋๋ก ๋์ค๋๋ฐ
์ญ์๋...
์ฌ๊ท๋ ๊ฐ๋
์ฑ์ด ์ข์ง๋ง callstack์ ๋ถ๋ฌ์ค๋ฏ๋ก for๋ฌธ์ ๋นํด ์๋์ ์ผ๋ก ์๊ฐ๋ณต์ก๋๊ฐ ๋์ต๋๋ค.
๋ฐ๋ผ์ for๋ฌธ์ผ๋ก ๋ค์ ๊ตฌํํด๋ณด๊ธฐ๋ก ํ์ต๋๋ค.
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
sysinput๋ฐ setrecursionlimit ์ ์ธํด์ฃผ๊ณ
T = int(input())
ans = []
for _ in range(T):
ans.append(int(input()))
ํ ์คํธ์ผ์ด์ค๋ฅผ ๋ฐ์ ans์ ์ถ๊ฐํฉ๋๋ค.
memo = [0]*(max(ans)+1)
memo[0] = 1
memo[1] = 2
memo[2] = 4
DP ์ด๊ธฐํ๋ฅผ ์งํํด์ฃผ๊ณ
for i in range(3,len(memo)):
memo[i] = ( memo[i-1] + memo[i-2] + memo[i-3] )% 1000000009
์ด๊ธฐํ ๋ค์ ๋จ๊ณ์ธ 3๋ถํฐ ๋๊น์ง DP๋ฅผ ๋๋ ค์ค์๋ค.
for values in ans:
print(memo[values-1])
๊ทธ๋ฆฌ๊ณ ans์์ ๊ฐ์ฅ ํฐ ๊ฐ์ DP๋๋ ค MEMO์ ๊ธฐ๋กํ์ผ๋ memo๊ฐ์ ์ฐธ์กฐํ์ฌ ๋ต์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.