Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 그래프이론
- 이코테
- 파이썬 3
- python3
- 단계별문제풀이
- Level1
- 구현
- 최단경로
- 백준
- 알고리즘_스터디
- 부스트캠프_AITech3기
- 프로그래머스
- 글또
- 주간회고
- 이진탐색
- 다시보기
- U_stage
- Level2_PStage
- mrc
- dp
- 부스트캠프_AITech_3기
- 정렬
- dfs
- 백트랙킹
- 알고리즘스터디
- ODQA
- 개인회고
- 기술면접
- Level2
- 그리디
Archives
- Today
- Total
국문과 유목민
(Week5)[DP] 정수 삼각형 본문
주간 코딩스터디 때 푼 문제들을 정리하고 있습니다. 구체적인 문제에 대한 정보는 게시글 내 링크를 살펴봐주세요
소요시간: 30분
1. 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/43105
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우 찾기
2. 접근 방식
- 이전에 풀었던 문제여서 비교적 쉽게 풀었다.
점화식: $dp[i][j] = triangle[i][j] + max(dp[i-1][j], dp[i][j-1])$
△▲△ (빈 삼각형은 삼각형 값이 없는 부분)
▲▲ (right만 존재하는 경우와, left만 존재하는 경우)
3. 코드
def solution(triangle):
dp = [[0]*(i+1) for i in range(len(triangle))]
dp[0][0] = triangle[0][0]
for i in range(1, len(triangle)):
for j in range(len(triangle[i])):
left = 0 if j==0 else dp[i-1][j-1]
right = 0 if j==len(triangle[i])-1 else dp[i-1][j]
dp[i][j] = triangle[i][j] + max(left, right)
return max(dp[-1])
4. 코멘트
- DP는 먼저 점화식을 세워놓고 하면 문제 풀이가 쉬운 것 같다.
- 대개 0번를 채워놓고 1번째 인덱스부터 시작한다는 것을 생각하면 쉽다.
- 점화식: 어떤 수열의 항 사이에 성립하는 관계식을 의미한다.
'알고리즘_코딩테스트 > 주간코딩 스터디 (주코스)' 카테고리의 다른 글
(Week6)[DP] Two Egg Drop (다시보기) (0) | 2022.07.07 |
---|---|
(Week6)[DP] 택배포장 (0) | 2022.07.07 |
(Week5)[DP] N으로 표현 (0) | 2022.07.07 |
(Week4)[소수찾기] 에라토스테네스의 체 (0) | 2022.07.07 |
(Week4)[완전탐색/순열] 소수 찾기 (0) | 2022.07.07 |