https://www.acmicpc.net/problem/1932
🗒️파이썬 코드 풀이
n=int(input())
d=[]
for i in range(n):
d.append(list(map(int, input().split())))
for i in range(1,n):
for j in range(len(d[i])):
if j==0:
d[i][j]=d[i][j]+d[i-1][j]
elif j==len(d[i])-1:
d[i][j]=d[i][j]+d[i-1][j-1]
else:
d[i][j]=max(d[i-1][j-1],d[i-1][j])+d[i][j]
print(max(d[n-1]))
1. 전형적인 DP 문제이다.
2. 반복문은 크게 2가지가 필요하다.
- 정수 삼각형 두 번째 줄에서 N 번째 줄까지의 반복문
- 정수 삼각형 각 줄에 있는 리스트의 크기만큼 반복문
(이것은 새로운 값 갱신을 위한 것)
3. 반복문 이후 조건문이 필요하다.
조건절은 크게 3가지로 구분 할 수 있다.
- 정수 삼각형 줄에 첫 번째 인덱스인 경우
- 정수 삼각형 줄에 마지막 인덱스인 경우
- 정수 삼각형 줄에 그 외의 경우
4. 이후 적절하게 인덱싱하여 정수 삼각형의 값들을 갱신하면 된다.
🔎내 풀이 방식
N = int(input())
graph = []
dp = []
for _ in range(N):
tmp = list(map(int,input().split()))
graph.append(tmp)
for i in range(1,N+1):
dp.append([0]*i)
dp[0][0] = graph[0][0]
for k in range(N-1):
# 양끝 0,N DP 값 선언
dp[k+1][0] = dp[k][0]+graph[k+1][0]
dp[k+1][len(dp[k])] = dp[k][len(dp[k])-1]+graph[k+1][len(dp[k])]
for i in range(1,len(dp[k])):
dp[k+1][i] = max(dp[k][i-1]+graph[k+1][i],dp[k][i]+graph[k+1][i])
print(max(dp[-1]))
1. 내 풀이에서는 graph 리스트와 dp 리스트 두개를 만들었다.
(일반적인 dp 풀이에서 이런방식으로 진행 되는 듯 하다.)
2. 새로운 dp 리스트를 만들었기 때문에, 초기 값 설정이 필요하다.
3. 이후 정수 삼각형 해당 줄에 0번째와 마지막 인덱스를 설정 해주었다.
4. 그리고 그 외의 dp 값들을 잘 인덱싱하여 채워주면 된다.
→ 굳이 dp 리스트 없이 graph를 갱신하는 방향으로 진행해도 되는 문제였다.
또 아쉬웠던 부분은 반복문 인자를 k라 두어 인덱싱의 가독성이 많이 떨어졌다.
📌 문제 코멘트
아주 전형적인 DP 문제라 잘 익혀두어야 한다.📚문제
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
위 그림은 크기가 5인 정수 삼각형의 한 모습이다.
맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다.
삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다.
입력
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
출력
첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다.
예제 입력 1 복사
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
예제 출력 1 복사
30
'알고리즘 > 알고리즘_백준' 카테고리의 다른 글
[Python][백준] 2805. 나무 자르기/ 이진탐색 (S2) (1) | 2024.09.07 |
---|---|
[Python][백준] 1914. 하노이 탑 / 재귀함수 (G5) (0) | 2024.09.07 |
[Python][백준] 1193. 분수찾기 / 구현 (S5) (0) | 2024.08.13 |
[Python][백준] 1149. 소수&팰린드롬 / 브루트포스, 에라토스테네스의 체 (S1) (0) | 2024.08.12 |
[Python][백준] 1149. RGB거리/ DP (S1) (0) | 2024.08.12 |