728x90
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
해당 문제는 다이나믹 프로그래밍에 기본 문제로 탑다운 방식과 바톰업 방식을 둘다 풀어보겠습니다.
브루트포스 방식으로 문제를 해결 할 경우 모든경우의수를 탐색해야함으로 O(n^2) 이라는 시간복잡도를 갖게 됩니다.
1) 탑다운 방식
# 탑다운 방식
n = int(input()) # 삼각형의 크기
triangle = []
for _ in range(n):
triangle.append(list(map(int, input().split())))
dp = [[0 for _ in range(n+1)]for _ in range(n)]
dp[0][0] = triangle[0][0]
for i in range(1, len(triangle)):
for j in range(len(triangle[i])):
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]
print(max(dp[n-1]))
2) 바톰업 방식
# 바텀업 방식
n = int(input()) # 삼각형의 크기
triangle = []
for _ in range(n):
triangle.append(list(map(int, input().split())))
for i in range(len(triangle)-1, 0, -1):
for j in range(len(triangle[i])-1):
triangle[i-1][j] += max(triangle[i][j], triangle[i][j+1])
print(triangle[0][0])
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 5582번 : 공통 부분 문자열 (1) | 2023.07.16 |
---|---|
[백준] 9935번 : 문자열 폭발 (0) | 2023.07.16 |
[백준] 11660번 : 구간 합 구하기 5 (0) | 2023.07.16 |
[백준] 11057번 : 오르막 수 (0) | 2023.07.16 |
[백준] 14003번 : 가장 긴 증가하는 부분 수열 5 (0) | 2023.07.16 |