https://programmers.co.kr/learn/courses/30/lessons/43105
다이나믹 프로그래밍을 사용하는 문제라고 합니다.
저는 다르게 접근한 것 같은데 우선 문제부터 요약해 보도록 하겠습니다.
다음과 같은 삼각형에서 위에서 부터 가장 아랫층 까지 쭉 타고 내려오는 경로가 있으면, 그 경로에서 가장 커지는 값을 return 하는 문제입니다.
즉 solution(triangle)에
triangle : 삼각형의 정보
가 주어질 때, 거쳐간 경로의 숫자의 최댓값을 return해야 합니다.
<Solution>
아이디어는 다음과 같습니다.
밑에서 두번째 층에서 출발해서 그 층에서 한층씩 위로 for loop를 진행시킵니다.
해당하는 mini triangle (위의 빨간 글씨에서 2,4,5 처럼) 에서 더 큰 값으로 전체 triangle을 update 시킵니다. 최종적으로 가장 꼭대기 층에 남는 숫자가 최대값입니다.
실제 구현은 아래와 같습니다.
def solution(triangle):
if len(triangle) == 1:
return triangle[0][0]
time = len(triangle)-1
list_ = triangle[len(triangle)-2][:]
for i in range(time-1,-1,-1):
new_list = []
for index,e in enumerate(triangle[i]):
new_list.append(max(e+triangle[i+1][index], e+triangle[i+1][index+1]))
list_ = new_list
triangle[i] = new_list
return new_list[0]
반응형
'코딩테스트 > Python 문제풀이' 카테고리의 다른 글
[프로그래머스] 도둑질 (0) | 2022.06.12 |
---|---|
[프로그래머스] 등굣길 (0) | 2022.06.12 |
[프로그래머스] N으로 표현 (0) | 2022.06.11 |
[프로그래머스] 외벽 점검 (0) | 2022.06.11 |
[백준] 이항 계수 3(페르마 소정리, modular inverse, 분할정복) (0) | 2022.05.27 |