티스토리 뷰
728x90
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최�
www.acmicpc.net
동적계획법 C++
숫자 트리에서 숫자들의 합이 최대가 되는 경로 구하기(최댓값 출력)
접근방법
전형적인 DP 상향식 풀이로 풀었다.
가장 밑 행부터 모든 숫자에 대해 해당 자리까지의 최댓값을 저장해가면서 값을 갱신한다.
예를들어 위의 사진에서 4번째 행 첫번째 자리 2에서 최댓값을 가지려면 4,5중 5를 선택해야하니까
원래 2가 있던 자리에 2+5 = 7을 저장한다. 두번째 자리인 7도 마찬가지로 5,2중에 5를 선택해서 7+5 = 12를 저장한다.
그렇게 맨 위까지 반복하면 결국 첫행 첫열에는 최댓값이 저장되게 된다.
이번 문제는 로직 정리하고 바로 코드 작성해서 완료까지 20분 정도 밖에 안걸렸다.
로직 정리하는데에도 그렇게 시간이 걸리진 않아서 굉장히 빨리 푼 것 같다.
전형적인 DP 풀이로 풀이되는 문제라 그런 것 같다.
소스코드
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int integers[500][500];
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j <= i ; j++){
cin >> integers[i][j];
}
}
for(int i = n-2 ; i >= 0 ; i--){
for(int j = 0 ; j <= i ; j++){
integers[i][j] += max(integers[i+1][j], integers[i+1][j+1]);
}
}
cout << integers[0][0];
return 0;
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[백준 1463] 알고리즘 43일차 : 1로 만들기 (0) | 2020.08.13 |
---|---|
[백준 2579] 알고리즘 42일차 : 계단 오르기 (0) | 2020.08.12 |
[백준 1874] 알고리즘 39일차 : 스택 수열 (0) | 2020.08.07 |
[백준 4949] 알고리즘 38일차 : 균형잡힌 세상 (0) | 2020.08.06 |
[백준 9012] 눈물겨운 알고리즘 37일차 : 괄호 (0) | 2020.08.05 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dfs
- 수학
- 토마토
- 스택
- 파이썬
- 최대힙
- 백트래킹
- 동적계획법
- 프로그래머스
- 우선순위큐
- 그리디알고리즘
- 백준
- Swift
- 이분탐색
- 게임이론
- 가장 큰 수 Swift
- 최단경로
- 웹크롤링
- c++
- 가장 큰 수 프로그래머스
- 다이나믹프로그래밍
- 알고리즘
- 트리
- 투포인터
- 정렬
- dp
- 최소힙
- BFS
- 자바
- 브루트포스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
글 보관함