문제 :
https://programmers.co.kr/learn/courses/30/lessons/43105
코딩테스트 연습 - 정수 삼각형
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30
programmers.co.kr
코드 :
def solution(triangle):
answer = 0
for i in range(1, len(triangle)) :
for j in range(len(triangle[i])) :
if j == 0 : # 왼쪽 끝 원소
triangle[i][j] += triangle[i-1][j]
elif j == len(triangle[i])-1 : # 오른쪽 끝의 원소
triangle[i][j] += triangle[i-1][j-1]
else :
triangle[i][j] += max(triangle[i-1][j-1] , triangle[i-1][j])
answer = max(triangle[-1])
return answer
이런 dp 문제 오랜만이다.
3학년 알설에서 배웠던 dp가 새록새록 떠오른다.
풀이법 :
2차원 그래프로 triangle을 보고
<예외처리>
가장 왼쪽, 가장 오른쪽인 경우 인덱스 에러가 나지않게 처리해준다.
( 맨 왼쪽의 원소는 윗줄에서 왼쪽의 원소에서 밖에 내려올 수 없다.
맨 오른쪽 원소는 윗줄의 가장 오른쪽 원소에서 밖에 내려올 수 없다.)
그렇게 값을 더하고 최종 triangle의 마지막줄의 max값을 반환한다.
복습 때 만든 코드(1) :
def solution(triangle):
answer = 0
for i in range(1,len(triangle)) :
for idx, val in enumerate(triangle[i]) :
if idx == 0 :
triangle[i][idx] += triangle[i-1][idx]
elif idx == len(triangle[i])-1 :
triangle[i][idx] += triangle[i-1][idx-1]
else :
triangle[i][idx] += max(triangle[i-1][idx-1],triangle[i-1][idx])
answer = max(triangle[-1])
return answer
val은 쓰지도 않을건데 idx를 써야하니까 enumerate를 이용해서 만들었다.
원래 코드가 더 좋은듯하다.
복습 때 만든 코드 (2):
def solution(triangle):
answer = 0
for i in range(1,len(triangle)) :
for j in range(0,i+1) :
if j == 0:
triangle[i][j]+= triangle[i-1][j]
elif j==i :
triangle[i][j] += triangle[i-1][j-1]
else :
triangle[i][j] += max(triangle[i-1][j-1], triangle[i-1][j])
answer = max(triangle[-1])
return answer
두번째 for문에서 range안에 len(triangle[i]) 가 아닌 i를 이용해서 풀어봤다.
유의점 :
1. max(triangle[-1])
-1 을 하면 가장 마지막 원소가 나온다는 것을 계속 잊는다.
참고 블로그 :
[Python] 프로그래머스 - 정수 삼각형 (동적계획법)
📃 문제 링크위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는
velog.io
복습 :
✅20220618
✅ 20220620
✅ 20220622
✅ 20220624
✅ 20220626
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스]완주하지 못한 선수 _해시 (0) | 2022.06.14 |
---|---|
[Python/프로그래머스]입국심사 _이분탐색 (0) | 2022.06.14 |
[Python/프로그래머스]N으로 표현 _DP (0) | 2022.06.14 |
[Python/프로그래머스]가장 먼 노드_그래프(BFS) (0) | 2022.06.11 |
[Python/프로그래머스]H-Index_정렬 (1) | 2022.06.11 |