Hits

안녕하세요. 모카의 머신러닝 입니다. 이번 포스팅에서는 백준 알고리즘 문제 풀이에 대해 포스팅하도록 하겠습니다.


코드는 이곳을 참고했음을 밝힙니다.


1. 동적 계획법 2

백준 10844번

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

import sys
input = sys.stdin.readline
mod = 1000000000
N = int(input())
D = [[0 for j in range(11)] for i in range(N+1)]

for i in range(1, 10):
    D[1][i] = 1
    
for i in range(2, N+1):
    D[i][0] = D[i-1][1]
    D[i][9] = D[i-1][8]
    for j in range(1, 9):
        D[i][j] = (D[i-1][j-1] + D[i-1][j+1]) % mod

sum = 0

for i in range(10):
    sum = (sum + D[N][i]) % mod
    
print(sum)


백준 13398번

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

N = int(input())
A = list(map(int, input().split()))

L = [0] * N
L[0] = A[0]
result = L[0]

for i in range(1, N):
    L[i] = max(A[i], L[i-1] + A[i])
    result = max(result, L[i])

R = [0] * N
R[N-1] = A[N-1]

for i in range(N-2, -1, -1):
    R[i] = max(A[i], R[i+1]+A[i])

for i in range(1, N-1):
    temp = L[i-1] + R[i+1]
    result = max(result, temp)

print(result)


백준 9252번

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

import sys
sys.setrecursionlimit(10000)
input = sys.stdin.readline
A = list(input())
A.pop()
B = list(input())
B.pop()

DP = [[0 for j in range(len(B)+1)] for i in range(len(A)+1)]
Path = []

for i in range(1, len(A) + 1):
    for j in range(1, len(B) + 1):
        if A[i-1] == B[j-1]:
            DP[i][j] = DP[i-1][j-1] + 1
        else:
            DP[i][j] = max(DP[i-1][j], DP[i][j-1])

print(DP[len(A)][len(B)])

def getText(r, c):
    if r==0 or c==0:
        return
    if A[r-1] == B[c-1]:
        Path.append(A[r-1])
        getText(r-1, c-1)
    else:
        if DP[r-1][c] > DP[r][c-1]:
            getText(r-1, c)
        else:
            getText(r, c-1)
            
getText(len(A), len(B))

for i in range(len(Path)-1, -1, -1):
    print(Path.pop(i), end='')
    
print()


지금까지 백준 알고리즘 동적 계획법 2 부분이었습니다.

읽어주셔서 감사합니다. 😃