Notice
Recent Posts
Recent Comments
Link
DevKim
[Python] 백준 #1932 정수 삼각형 본문
728x90
https://www.acmicpc.net/problem/1932
[ 알고리즘 ]
DP
[ 문제 접근 ]
▶ 완전탐색의 구조인데? 경우의 수가 너무 큰데? 메모이제이션 가능하다 ! 매번 최대를 구해야하는 겹치는 부분문제
= DP
01. 입력
7 ->tri[0][0]
3 8 -> tri[1][0], tri[1][1]
8 1 0 -> tri[2][0] ,tri[2][1],tri[2][2]
2 7 4 4 ...
4 5 2 6 5 ...
02. 상태값
n행의 m열 -> dp[n][m]
03. 조건
1. tri[n][m] 이 해당 줄의 시작일 땐, dp[n][m] = dp[n-1][m] + 현재위치의 값
2. tri[n][m] 이 해당 줄의 마지막일 땐, dp[n][m] = dp[n-1][m-1] + 현재위치의 값
3. 그외.. 중간에 껴있는 것들 일땐, dp[n][m] = max( dp[n-1][m], dp[n-1][m-1] ) + 현재 위치의 값
[ 코드 ]
n = int(input())
dp=[[0]*n for _ in range(n)]
tri = []
for _ in range(n):
tri.append(list(map(int, input().split())))
dp[0][0]=tri[0][0]
for i in range(1, n):
List = tri[i]
for j in range(len(List)):
if j == 0: # 첫번째 값
dp[i][j]=dp[i-1][j]+List[j]
elif j==len(List)-1: # 마지막 값
dp[i][j]=dp[i-1][j-1]+List[j]
else:
dp[i][j]=max(dp[i-1][j],dp[i-1][j-1])+List[j]
Max=dp[n-1][0]
for i in range(1,n):
if Max<dp[n-1][i]:
Max=dp[n-1][i]
print(Max)
728x90
'알고리즘 PS' 카테고리의 다른 글
[Python] LV.02 - 행렬 테두리 회전하기 (0) | 2021.06.30 |
---|---|
[Python] 프로그래머스 LV.02 - 괄호 회전 (0) | 2021.06.30 |
[Python] 백준 #1874 스택 수열 (0) | 2021.06.12 |
[Python] 백준 #2493 탑 (0) | 2021.06.12 |
[python] 백준 #1158 요세푸스 문제 재풀이 (0) | 2021.06.12 |
Comments