문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/43105

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 문제 설명 

위에서부터 맨 아래까지 내려오는데 오면서 값을 더하고 가장큰 값을 return

 

 알고리즘 

그냥 위에서부터 각 지점의 최대값을 갱신해주면서 내려온다음 마지막 행에서 최대값을 구하면됨 .

 

 코드 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include string
#include vector
#includealgorithm
using namespace std;
 
int solution(vectorvectorint triangle) {
 
    int dp[505][505];
    int size = triangle.size();
    vectorint  t;
 
    dp[1][0= triangle[0][0+ triangle[1][0];
    dp[1][1= triangle[0][0+ triangle[1][1];
 
    for (int i = 2; i  size; i++) {
 
        int Size = triangle[i].size();
 
        for (int j = 0; j  Size; j++) {
 
            맨왼쪽
            if (j == 0) dp[i][j] = dp[i - 1][j] + triangle[i][j];
 
            맨오른쪽
            else if (j == Size - 1) dp[i][j] = dp[i - 1][j - 1+ triangle[i][j];
 
            그 외 중간 부분
            else
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - 1] )+ triangle[i][j];
 
        }
    }
 
    마지막행에서 최대값을출력
    int answer = 0;
    int Size = triangle[size - 1].size();
 
    for (int i = 0; i  Size; i++) {
        answer = max(dp[size - 1][i], answer);
    }
 
    return answer;
}
 
 
cs
 

 

 

 

 

'c++ > 프로그래머스' 카테고리의 다른 글

프로그래머스 : 숫자야구  (0) 2020.04.02
프로그래머스 : 등굣길  (0) 2020.04.02
프로그래머스 : 타일 장식물  (0) 2020.04.02
프로그래머스: 단어변환  (0) 2020.04.02
프로그래머스 : 네트워크  (0) 2020.04.02
ariz1623