https://school.programmers.co.kr/learn/courses/30/lessons/43105
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다.
삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요.
제한사항
- 삼각형의 높이는 1 이상 500 이하입니다.
- 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다.
def solution(triangle):
for i in range(1, len(triangle)): #삼각형의 높이만큼(꼭대기 다음 줄부터 맨 끝 줄까지)
for j in range(len(triangle[i])): #삼각형의 각 가로줄(2번째 줄이라면(i가 1일 때) 그 줄에는 0과1번 인덱스가 있음)
if j==0: #왼쪽 끝이면
triangle[i][j]+=triangle[i-1][0] #이전 줄의 맨 왼쪽 값 더함
elif j==i: #오른쪽 끝이면
triangle[i][j]+=triangle[i-1][j-1] #이전 줄의 맨 오른쪽 값 더함
else: #양쪽 끝이 아닐 때
triangle[i][j]+=max(triangle[i-1][j], triangle[i-1][j-1]) #이전 줄의 왼쪽 위 대각선, 오른쪽 위 대각선 값중 큰 값 더함
return max(triangle[-1]) #triengle[-1]는 삼각형 리스트의 끝(리스트의 마지막 요소를 음수 인덱스로 표현한 것.) ==triangle[len(triangle) - 1]
더보기
어려운 dp.. 하지만 점점 익숙해져가는 것 같다
아자뵤
'코딩 테스트 일지 📒' 카테고리의 다른 글
코테 언어 자바로 변경! 다시 처음부터 시작해보자Go😤 (0) | 2024.08.01 |
---|---|
[다이나믹 프로그래밍] 효율적인 화폐 구성 (0) | 2024.04.11 |
[다이나믹 프로그래밍] 1로 만들기 (1) | 2024.04.08 |
[다이나믹 프로그래밍] list를 value로 갖는 dict 생성하기, enumerate() 함수, dict 첫 번째 key, value 가져오기 + 개미전사 (1) | 2024.04.07 |
[DFS] 백준_양 한마리... 양 두마리... (1) | 2024.04.05 |