▶ 코드

 

# [ 1, 1, 2, 3, 5, 8, 13 ... ]
n = int(input())

memo = [0]*91

def bnr(n):
    if n==1:
        return 1
    if n==2:
        return 1
    if memo[n] != 0:
        return memo[n]
    else:
        memo[n] = bnr(n-1)+bnr(n-2)
        return memo[n]

print(bnr(n))

▶ 코드

 

n = int(input())
p = []

for i in range(n):
    p.append(list(map(int, input().split())))

for i in range(1, len(p)):
    p[i][0] += min(p[i-1][1], p[i-1][2])
    p[i][1] += min(p[i-1][0], p[i-1][2])
    p[i][2] += min(p[i-1][0], p[i-1][1])

print(min(p[-1][0], p[-1][1], p[-1][2]))


''' 메모리 초과됐던 코드 '''
'''
N = int(input())

temp = []
prev = []
for i in range(N):
    if i == 0:
        temp = list(map(int, input().split())) # [26, 40, 88]
    else:
        temp2 = []
        input_num = list(map(int, input().split())) # [49, 60, 57]
        

        if i == 1:
            for j in range(3):
                for k in range(3):
                    if j != k:
                        temp2.append( [temp[j], input_num[k]] ) 
            temp = temp2
            
        else:
            max_value = 0
            for j in range(len(temp)): # 0~5
                index = prev.index(temp[j][1])
                #print('index = ', index)
                
                for k in range(3):
                    if k != index:
                        temp2.append( [ sum(temp[j]), input_num[k] ] )
            temp = temp2

        prev = input_num
        
    print(i, temp)
    print()


for i in range(len(temp)):
    temp[i] = sum(temp[i])

print(min(temp))

'''

▶ 코드

 

# 1, 2, 3, 5, 8, 13, 21, 34, 55 ...

N = int(input())

memo = [0]*1001

def fib(N):
    if N == 1:
        return 1
    if N == 2:
        return 2
    if memo[N] != 0:
        return memo[N]
    else:
        memo[N] = fib(N-1) + fib(N-2)
        return memo[N]

print( fib(N) % 10007 )

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 

 코드

 

# N을 만드는 방법 = [1개, 2개, 4개, 7개, 13개...]
# 7은 4+2+1
# 13은 7+4+2

T = int(input())

memo = [0]*11

def onetwothree(N): # N = 1~10
    if N == 1:
        return 1
    if N == 2:
        return 2
    if N == 3:
        return 4
    
    if memo[N] != 0:
        return memo[N]
    else:
        memo[N] = onetwothree(N-1)+onetwothree(N-2)+onetwothree(N-3)
        return memo[N]

for _ in range(T):
    N = int(input())
    print( onetwothree(N) )

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 

 코드

트리 구조

N = int(input())

if N == 1:
    print(0)
else:
    stage = []		# stage로 트리구조를 표현 
    stage.append([N])

    flag = False

    i = 0

    while (flag==False):
        temp = []
        for a in stage[i]:
            if a % 3 == 0:
                temp.append(a//3)
            if a % 2 == 0:
                temp.append(a//2)
            if a-1 not in temp:
                temp.append(a-1)

            if 1 in temp:	# 1나오는 순간 중지 시킴
                flag = True
                
        stage.append(temp)
        i += 1

    #print(stage)
    print(i)

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 

 코드

 

T = int(input())

memo = [0] * 101

def pdb(N):
    if (N == 1):
        return 1
    if (N == 2):
        return 1
    if (N == 3):
        return 1
    if (memo[N] != 0):
        return memo[N]
    else:
        memo[N] = pdb(N-2) + pdb(N-3)
        return memo[N]

for _ in range(T):
    N = int(input())
    print(pdb(N))



''' 시간초과 
T = int(input())

def pdb(N):
    if (N == 1):
        return 1
    if (N == 2):
        return 1
    if (N == 3):
        return 1
    return pdb(N-2)+pdb(N-3)

for _ in range(T):
    N = int(input())
    print(pdb(N))
'''

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 1932] 정수 삼각형  (0) 2020.04.26

 


코드

 

# 밑에서부터 더해 올라가서 최대합을 구한다 

n = int(input())

num = []
for i in range(n):
    num.append(list(map(int, input().split())))

#print(num)

for i in range(n-1, 0, -1):
    for j in range(i):
        temp_max = max(num[i][j], num[i][j+1])
        num[i-1][j] += temp_max

print(num[0][0])

 

 

 

 

'■코테 중요개념 > 다이나믹 프로그래밍(DP)' 카테고리의 다른 글

[백준 2193] 이친수  (0) 2020.04.30
[백준 1149] RGB거리  (0) 2020.04.30
[백준 11726] 2xn 타일링  (0) 2020.04.30
[백준 9095] 1, 2, 3 더하기  (0) 2020.04.26
[백준 1463] 1로 만들기  (0) 2020.04.26
[백준 9461] 파도반 수열  (0) 2020.04.26