1932-s1 성공
This commit is contained in:
39
workbook_7319/silver/1932-s1.py
Normal file
39
workbook_7319/silver/1932-s1.py
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# 정수 삼각형
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
input = sys.stdin.readline
|
||||||
|
|
||||||
|
def solution():
|
||||||
|
n = int(input().rstrip())
|
||||||
|
|
||||||
|
triangle = [[] for _ in range(n)]
|
||||||
|
|
||||||
|
for i in range(n):
|
||||||
|
triangle[i] = list(map(int, input().rstrip().split()))
|
||||||
|
|
||||||
|
dp = [[0] * i for i in range(1, n+1)]
|
||||||
|
dp[0][0] = triangle[0][0]
|
||||||
|
|
||||||
|
for i in range(1, n):
|
||||||
|
for j in range(len(dp[i])):
|
||||||
|
for k in range(2):
|
||||||
|
if j-k >= len(dp[i-1]) or j-k < 0:
|
||||||
|
continue
|
||||||
|
dp[i][j] = max(dp[i][j], dp[i-1][j-k]+triangle[i][j])
|
||||||
|
|
||||||
|
print(max(dp[n-1]))
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
solution()
|
||||||
|
|
||||||
|
"""
|
||||||
|
걸린 시간: 15분
|
||||||
|
|
||||||
|
시간 복잡도: 전체 수에 대해서 진행하기 때문에 O(n^2)이다.
|
||||||
|
|
||||||
|
해설: 1149번(RGB로 집 칠하기) 문제랑 비슷하다. 현재 값을 선택할 때 여기까지 올 수 있는 경우의 수 중 최선의 플레이를 고르고, 마지막에 마지막 라인 중에서
|
||||||
|
최선을 선택하는 방식이다. 1149번에서 설명했지만, 그리디와는 다르게 현재 선택한 수가 최선일지는 모르는 것이기 때문이다.
|
||||||
|
"""
|
||||||
Reference in New Issue
Block a user