-
프로그래머스 Level3 - 정수 삼각형, C++쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 4. 26. 12:49반응형
#include <string> #include <vector> #include <algorithm> using namespace std; int arr[501][501]; // 다음 외부 벡터에서 오른쪽 왼쪽 위치를 골라야 한다 // 인덱스가 같은게 왼쪽 1큰게 오른똑이다 // arr을 통해 dp int solution(vector<vector<int>> triangle) { int answer = 0; int n = triangle.size(); // 꼭짓점 값 answer = arr[0][0] = triangle[0][0]; for(int i = 1; i < n; i++){ for(int j = 0; j <= i; j++){ if(j == 0){ arr[i][j] = arr[i-1][j] + triangle[i][j]; } else if(j == i){ arr[i][j] = arr[i-1][j-1] + triangle[i][j]; } else { arr[i][j] = max(arr[i-1][j], arr[i-1][j-1]) + triangle[i][j]; } answer = max(answer, arr[i][j]); } } return answer; }
이전에 이런 문제들을 많이 풀었기에 풀 수 있었던 문제입니다. arr 배열을 하나 더 만들어서 이곳에 삼각형 값들을 더하고 이 중에서 제일 큰 값을 점점 올리는 식입니다. 다른 사람들의 코드를 보니 기존의 배열 triangle을 이용해서 += 를 하는 방식으로 했는데 그 방식이 시간적으로, 공간적으로 더 나아 보입니다. 이후 개선의 여지가 있는 코드
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 9019 DSLR - C++, 큐를 이용한 너비 우선 탐색 (0) 2021.04.30 백준 2263 트리의 순회 - C++ (0) 2021.04.28 프로그래머스 Level 2 - 가장 큰 수 C++ (0) 2021.04.10 프로그래머스 Level2 - 구명보트 C++ (0) 2021.04.08 프로그래머스 Level 1 - 체육복 C++ (0) 2021.04.07