코딩테스트/프로그래머스

프로그래머스 LV3 - 정수 삼각형

수박 서리 2022. 11. 17. 10:03

0️⃣ 문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/43105

 

프로그래머스

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

programmers.co.kr

1️⃣ 나의 풀이

동적 프로그래밍을 이용해 삼각형의 위에서 부터 저장해나가면서 왼쪽 오른쪽으로 나아간다.

left = dp[f][i] + triangle[f + 1][i];

right = dp[f][i] + triangle[f + 1][i + 1];

이런식으로 나아갔다. 그리고 그전에 dp에 저장 되어있는 원소와 비교하여 큰 값을 저장하는 식으로 진행했다.

2️⃣ 내 코드

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
#include <string>
#include <vector>
 
using namespace std;
 
int dp[500][500];
 
int solution(vector<vector<int>> triangle) {
    int answer = 0;
    size_t floor = triangle.size();
 
    dp[0][0= triangle[0][0];
    size_t left = 0;
    size_t right = 0;
    for (size_t f = 0; f < floor - 1; f++// 총 층의 -1번까지
    {
        for (size_t i = 0; i <= f; i++//해당층의 원소 갯수만큼
        {
            //왼쪽으로 
            left = dp[f][i] + triangle[f + 1][i];
            if (left > dp[f + 1][i]) //기존값보다 크다면 고침
                dp[f + 1][i] = left;
 
            //오른쪽으로
            right = dp[f][i] + triangle[f + 1][i + 1];
            if (right > dp[f + 1][i + 1]) //기존값보다 크다면 고침
                dp[f + 1][i + 1= right;
        }
    }
    
    for (int i = 0; i<floor; i++)
    {
        if (answer < dp[floor - 1][i])
            answer = dp[floor - 1][i];
    }
 
    return answer;
}
cs

 기억 할 점

dp의 자료형을 제대로 만들지 않아 고생했다.

자료형 설정에 좀 더 신중하자