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
- DP
- 동적계획법
- Backtracking
- 알고리즘
- Network
- 해시
- 백트래킹
- DynamicProgramming
- dynamic programming
- 백준
- programmers
- BFS
- HashMap
- Algorithm
- 네트워크
- broadcast
- 프로그래머스
- boj
- switch
- 너비우선탐색
- Spring
- 이분탐색
- 그리디
- 깊이우선탐색
- 구현
- greedy
- 브루트포스
- 해시맵
- 스프링
- DFS
Archives
- Today
- Total
옌의 로그
[Algorithm] 프로그래머스 - 정수 삼각형 본문
문제
사용 알고리즘
- 동적계획법(Dynamic Programming)
해결방법
- 2차원 db배열을 만들어 구한다.
- dp[i][j] == (i, j) 지점까지 가는데 발생한 최대 경비
- 꼭대기에서 바닥까지 이어지는 경로를 구하는데, 이 때 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능
- dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]
- dp[2][1] = max(dp[1][0], dp[1][1]) + triangle[2][1]
- 각 층의 첫 번째 자리는 위 층에서만 갈 수 있다
- dp[i][0] = dp[i-1][0] + triangle[i][0]
- dp[3][0] = dp[2][0] + triangle[3][0]
- 각 층의 마지막 자리는 위 층의 왼쪽 자리에서만 갈 수 있다.
- dp[i][i] = dp[i-1][i-1] + triangle[i][i]
- dp[4][4] = dp[3][3] + triangle[4][4]
i \ j | [0] | [1] | [2] | [3] | [4] |
[0] | 7 | ||||
[1] | 3 | 8 | |||
[2] | 8 | 1 | 0 | ||
[3] | 2 | 7 | 4 | 4 | |
[4] | 4 | 5 | 2 | 6 | 5 |
- dp[바닥][0~삼각형크기] ==> for 문으로 돌면서 가장 큰 값을 구한다
소스코드
사용언어 : C++
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int dp[501][501];
int solution(vector<vector<int>> triangle) {
dp[0][0] = triangle[0][0];
for(int i = 1; i < triangle.size(); i++) {
dp[i][0] = dp[i-1][0] + triangle[i][0]; //각 층의 첫 번째 자리
dp[i][i] = dp[i-1][i-1] + triangle[i][i]; //각 층의 마지막 자리
for(int j = 1; j < i; j++){
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j];
}
}
int last_floor = triangle.size() - 1;
int max_path_num = dp[last_floor][0];
for(int i = 1; i < last_floor; i++) {
if (dp[last_floor][i] > max_path_num) {
max_path_num = dp[last_floor][i];
}
}
return max_path_num;
}
한줄평
전형적인 dp 문제. .
사용가능 언어에 javascript가 없어서 c++로 풀었다.
2차원 vector 길이 구할 때는 .size() 잊지말자.
'스터디 > 알고리즘' 카테고리의 다른 글
[Algorithm] 프로그래머스 - N으로 표현 (0) | 2023.03.21 |
---|---|
[Algorithm] 프로그래머스 - 표 편집 (0) | 2023.03.03 |
[Algorithm] 프로그래머스 - 등산코스 정하기 (5) | 2023.01.25 |
[Algorithm] 프로그래머스 - 셔틀버스 (1) | 2023.01.23 |
[Algorithm] 프로그래머스 - 주차 요금 계산 (0) | 2023.01.20 |
Comments